任何人都可以告诉我,为什么我不会得到异常,如果远程套接字正在关闭并发送FIN + ACK? Wireshark告诉我,接收到FIN + ACK并且OS发送ACK。
这是我的代码。我真的尝试了一切。
byte firstByte = (byte)instream.read();
if (firstByte == -1){
return null;
}
byte[] bytes = new byte[instream.available() + 1];
bytes[0] = firstByte;
instream.read(bytes, 1, bytes.length - 1);
instream是Socket.getInputStream(),在Socket.getOutputStream()的外部。
我的15秒心跳将关闭连接。
答案 0 :(得分:0)
远程计算机关闭网络连接不是系统级错误。尝试从与表示已关闭连接的本地末尾的InputStream
相关联的Socket
读取将检测文件结束条件,这对于任何Inputstream
都是自然可能的。< / p>
每{{}}},InputStream.read()
在到达文件末尾时返回-1
。对于网络套接字的InputStream
,这是一个相当可靠的指示,表明连接已关闭。
您需要注意的是远程客户端丢弃连接而不是干净地关闭它。本地计算机无法检测到这种情况,尝试从此类连接的本地套接字读取将无限期地阻塞。