我有一个充当“服务器”的 Java 桌面应用程序和一个充当“客户端”的 Android 应用程序。
“客户端”应发送字符串并从“服务器”接收响应字符串[]。我遇到的唯一方法是像这样使用套接字
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 永远不会准备好,我无法收到服务器响应,但“服务器”报告数据已发送。
你能指出我的错误吗(我想这很明显,但我看不到)?
附言也许这是错误的方式,但在这里使用任何中间层都不是一种选择。我也不能修改服务器代码。
最佳答案
有点像 :)
问题出在“服务器”代码中。
在我的例子中,它发送的是空的 UTF 字符串,根本无法接收(应该至少是一个空格字符,以便 InputStream 捕获一些东西)
关于java - Android 与 PC 通过 Socket 进行数据交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4667982/