[英]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.