我正在使用Java来实现多线程TCP服务器 - 客户端应用程序。但是现在我遇到了一个奇怪的问题:当我关闭服务器套接字时,接收器仍然可以连续接收最后发送的数据包。由于套接字读取的细节是内核问题,我无法弄清楚原因。任何人都可以提供一些指导方针吗? 在此先感谢! 编辑: 所涉及的代码很简单:为什么TCP接收器可以在Socket服务器关闭后接收数据?
public void run() {
while(runFlag) {
//in = socket.getSocketInputStream();
//byte[] buffer = new byte[bufferSize];
try {
in.read(buffer);
//process the buffer;
}catch(IOException e) {
//
}
}
}
当关闭服务器套接字,该读操作将持续地接收分组(每次进入while循环)。
如果数据已经在* sender's *套接字缓冲区中,它仍然会在FIN之前发送。 – EJP 2010-12-02 06:20:45
'FIN'的含义是什么? – 2010-12-02 08:44:13
它是一个*单个位*,表示这是此连接的最终数据包。 – EJP 2010-12-02 11:07:19