我怎么知道客户端在socket中发送FIN包?

时间:2017-05-03 02:32:29

标签: java sockets

在客户端,当呼叫clent.close()时,它将发送FIN数据包以尝试结束连接。是否有服务器端的API知道有一个FIN数据包来关闭服务器端的连接?如果没有,为什么?什么是双方关闭联系的最佳实践?

客户代码:

    String host = "127.0.0.1"; 
    int port = 8899;
    Socket client = new Socket(host, port);
    String data = "Hello world";
    Writer writer = new OutputStreamWriter(client.getOutputStream());
    writer.write(data);
    writer.flush();
    writer.close();
    client.close();

可以看到一个例子here

2 个答案:

答案 0 :(得分:0)

当服务器收到FIN时,它会将此视为流结束条件。

换句话说,每次在套接字的InputStream上调用Conflicts: GIT-VERSION-GEN RelNotes 时,它将返回-1而不是读取任何数据 - 就像你从文件中读取一样,你就到了文件。

答案 1 :(得分:0)

当对等方收到FIN:

  • read()将返回-1
  • readLine()将返回null
  • readXXX()会为其他任何X投掷EOFException

不会发生的事情:

  • Socket.isClosed()不会神奇地成为现实
  • Socket.isConnected()不会神奇地变得虚假​​。