在客户端,当呼叫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。
答案 0 :(得分:0)
当服务器收到FIN时,它会将此视为流结束条件。
换句话说,每次在套接字的InputStream上调用Conflicts:
GIT-VERSION-GEN
RelNotes
时,它将返回-1而不是读取任何数据 - 就像你从文件中读取一样,你就到了文件。
答案 1 :(得分:0)
当对等方收到FIN:
read()
将返回-1 readLine()
将返回null readXXX()
会为其他任何X投掷EOFException
。不会发生的事情:
Socket.isClosed()
不会神奇地成为现实Socket.isConnected()
不会神奇地变得虚假。