繁体   English   中英

我怎么知道客户端在套接字中发送FIN包?

[英]How can I know client send FIN package in socket?

在客户端中,当调用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();

这里可以举一个例子。

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

换句话说,每次在套接字的InputStream上调用read时,它将返回-1而不是读取任何数据-就像您从文件中读取文件一样,直到到达文件末尾。

当对等方收到FIN时:

  • read()将返回-1
  • readLine()将返回null
  • readXXX()将为任何其他X抛出EOFException

不会发生什么:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM