Java Socket:远程FIN + ACK没有异常本地ACK

时间:2015-01-23 15:23:28

标签: java sockets ioexception

任何人都可以告诉我,为什么我不会得到异常,如果远程套接字正在关闭并发送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秒心跳将关闭连接。

1 个答案:

答案 0 :(得分:0)

远程计算机关闭网络连接不是系统级错误。尝试从与表示已关闭连接的本地末尾的InputStream相关联的Socket读取将检测文件结束条件,这对于任何Inputstream都是自然可能的。< / p>

每{{}}},InputStream.read()在到达文件末尾时返回-1。对于网络套接字的InputStream,这是一个相当可靠的指示,表明连接已关闭。

您需要注意的是远程客户端丢弃连接而不是干净地关闭它。本地计算机无法检测到这种情况,尝试从此类连接的本地套接字读取将无限期地阻塞。