我有一个像“服务器”和Android应用程序一样的Java桌面应用程序,应该充当“客户端”。
“Client”应该发送String并从“server”接收响应String []。我遇到的唯一方法是使用像这样的套接字
Socket socket = null;
try {
Log.d(log_tag, "creating socket");
socket = new Socket("192.168.1.123", 8090);
Log.d(log_tag, "creating out");
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
DataInputStream in = new DataInputStream(socket.getInputStream());
Log.d(log_tag, "out created. sending data");
out.writeUTF("sql");
Log.d(log_tag, "data sent");
Log.d(log_tag, "receiving data. loop");
while(in.available() == 0);
Log.d(log_tag, "received = " + in.readUTF());
out.close();
in.close();
socket.close();
Log.d(log_tag, "all closed");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d(log_tag, "finished");
“服务器”以相同的方式构建,除了操作顺序(首先读取,然后写入响应)。
问题:Android应用程序在线冻结
while(in.available() == 0);
所以,InputStream从未准备好,我无法接收服务器响应,但“服务器”报告,数据已发送。
你能指出我的错误吗(我想这很明显,但是我看不到它)?
附:也许这是错误的方式,但这不是在这里使用任何中间层的选择。我也无法修改服务器代码。
答案 0 :(得分:1)
种类的necropost:)
问题出在“服务器”代码中。
在我的情况下,它发送的是空UTF字符串,根本无法接收(至少应该有一个空格字符,以便InputStream捕获内容)