首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java套接字:远程FIN + ACK和本地ACK无异常

Java套接字:远程FIN + ACK和本地ACK无异常
EN

Stack Overflow用户
提问于 2015-01-23 23:23:28
回答 1查看 650关注 0票数 0

谁能告诉我,如果远程套接字关闭并发送FIN + ACK,为什么我不会得到异常?Wireshark告诉我,操作系统接收FIN + ACK并发送ACK。

这是我的代码。我真的什么都试过了。

代码语言:javascript
复制
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秒心跳信号关闭。

EN

回答 1

Stack Overflow用户

发布于 2015-01-23 23:52:41

远程机器关闭网络连接不是系统级错误。尝试从与代表已关闭连接的本地端的Socket相关联的InputStream读取时,将检测到文件结束条件,这对于任何Inputstream来说都是一种自然的可能性。

根据its docs,当到达文件末尾时,InputStream.read()返回-1。对于网络套接字的InputStream,这是连接已关闭的相当可靠的指示。

您需要注意的是远程客户端在没有完全关闭连接的情况下丢弃连接。本地计算机无法检测到这一点,从此类连接的本地套接字读取数据的尝试将无限期地阻塞。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28113093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档