【发布时间】:2023-07-06 22:59:02
【问题描述】:
我最近被要求为我工作的公司做一个 android 应用程序。我的经验主要是在 Ruby/C++/C# 上,所以在 Java 上编程(尽管 sintax 很熟悉)对我来说是一个新事物。
我的客户端 (Java) 上有这个方法,它基本上通过套接字建立到 Ruby 服务器的连接。在向服务器发送文本时它工作正常。这是服务器和客户端的代码。
客户端(JAVA)
public static void call_socket(String[] cadena)
{
PrintWriter salida;
DataInputStream entrada;
try
{
if(SocketClass.sockethost == "")
{
if(SocketClass.socketport == 0)
{
get_instalacion();
}
}
Socket clientSocket = new Socket();
clientSocket.bind(null);
clientSocket.connect(new InetSocketAddress(SocketClass.sockethost, SocketClass.socketport),30000);
salida = new PrintWriter(clientSocket.getOutputStream(), true);
salida.println(Arrays.toString(cadena));
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("Exception creating new Input/output Streams: " + e);
return;
}
};
服务器(红宝石)
require 'socket'
require 'pg'
require 'openssl'
server = TCPServer.new('0.0.0.0',3000)
loop do
Thread.start(server.accept) do |client|
chain= client.gets
chain= chain.delete('[')
chain = chain.delete(']')
chain = chain.gsub(/\s+/, "")
chain = chain.gsub(',', "|")
arr_cade = chain.split("|")
pg_conn = PGconn.connect(:host=> 'localhost', :dbname => 'termventas', :port => 5432, :user => 'postgres', :password=> 'pass')
case arr_cade[1]
when "01"
arr_cade[2] = arr_cade[2].gsub(/\s+/, "")
arr_cade[2]= arr_cade[2].upcase
arr_cade[3] = arr_cade[3].upcase
result = pg_conn.exec("SELECT entrada, clave_venta FROM terminales_usuarios
WHERE entrada = '#{arr_cade[2]}'
AND clave_venta = '#{arr_cade[3]}'")
if result.count == 0 || result == nil
puts "Empty"
else
client.puts "Welcome"
end
end
pg_conn.PGconn.close()
client.close
end
end
现在,正如我所说,向服务器发送请求时一切正常,我能够发送正确的字符串 [] 并在套接字服务器上正确评估它。现在我试图实现从客户端的服务器获取输入。我做了一些研究,这基本上是我发现为了捕获服务器产生的输入需要做的事情:
BufferedReader server_input= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String answer_back= server_input.readLine();
Log.v("Response", answer_back);
但是,如果我这样做,它会提示我添加一个 throw 声明或用 try/catch 包围它。我继续添加 try/catch 并编译我的代码。
在我执行触发它挂起的套接字连接的操作之后会发生什么。应用程序不会崩溃或任何事情,套接字只是不响应(既不发送/接收)。我真的不知道这是什么原因造成的。如果我删除涉及捕获和显示服务器返回的字符串的句子,一切正常。
有什么想法吗?
顺便说一句,我使用 Eclipse 并使用模拟器来模拟我的 android 设备。
【问题讨论】:
-
我不知道这是否可行。写完后试试
client.close_write。