我做了一个脚本,在客户端和服务器之间使用特定端口上的套接字交换数据。 按顺序,我期待:
服务器正在侦听
客户端打开套接字
通过发送一个int - >服务器akwnoledges从未收到过!
我刚注意到我的客户端收到了int,当我粗暴地退出服务器时
这是我的(简单)代码。 客户端:
Socket socket = new Socket(SERVER_ADDR, PORT);
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
DataInputStream dIn = new DataInputStream(socket.getInputStream());
Log.v("[DEBUG]", "waiting aknowledgement");
status = dIn.readInt(); //<-- BLOCKS HERE
Log.v("[DEBUG]", "ack"); //<-- RECEIVED WHEN SERVER IS EXITED
服务器:
try {
DataInputStream stdIn = new DataInputStream(client.getInputStream());
DataOutputStream stdOut = new DataOutputStream(client.getOutputStream());
while (incoming) {
stdOut.writeInt(1);
stdOut.flush();
System.out.println("Waiting...");
var_from_client = stdIn.readInt(); //<-- BLOCKS HERE (BECAUSE CLIENT IS BLOCKED)
// ...
}
} catch (Exception e) {}
如何解释此错误?
答案 0 :(得分:0)
'套接字没有刷新数据'与它完全无关。这是由应用程序中的错误引起的死锁,。
解决方案:从客户端发送int。
注意:
DataOutputStream
直接包裹它。