套接字未刷新数据



我做了一个脚本来交换客户端和服务器之间的数据,在特定端口上有套接字。为了,我期待:

  • 服务器正在侦听

  • 客户端打开套接字

  • 服务器通过发送一个 int -> 从未收到过!

我刚刚注意到我的客户端收到了 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) {}

如何解释此错误?

"套接字不刷新数据"与它完全无关。这是由应用程序中的错误引起的死

  1. 您的服务器发送一个 int。
  2. 您的客户会收到 int。
  3. 您的服务器阻止尝试读取另一个 int。
  4. 您的客户不发送 int。
  5. 服务器永远无法发送另一个 int,因为它被阻止等待不存在的回复 int。
  6. 您的客户端在尝试接收另一个 int 时阻塞,因为服务器被阻止发送它。

解决方案:从客户端发送 int。

笔记:

  1. 刷新套接字的输出流不执行任何操作,刷新直接包裹在其周围的DataOutputStream也不执行任何操作。
  2. 永远不要忽略异常。

相关内容

  • 没有找到相关文章

最新更新