当前位置: 首页 > 知识库问答 >
问题:

Java套接字:远程FIN ACK和本地ACK没有异常

丌官晨
2023-03-14

有人能告诉我,为什么我不会得到一个异常,如果远程套接字正在关闭并发送FIN确认字符?Wireshark告诉我,FIN确认字符是由操作系统接收和发送的。

这是我的代码。我真的尝试了一切。

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个答案

那鹏
2023-03-14

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

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

您需要注意的是,远程客户端会在未完全关闭连接的情况下断开连接。本地机器无法检测到这一点,尝试从此类连接的本地套接字读取将无限期阻塞。

 类似资料:
  • 我在tomcat日志中每两分钟就会出现一次异常: 警告nio。ReadHandler[hz.\u hzInstance\u 1\u xyz.IO.thread-in-2]-[127.0.0.1]:5702[xyz][3.2.3]hz_hzInstance_1_xyz。木卫一。线程2关闭套接字到endpoint地址[127.0.0.1]:5701,原因:java。木卫一。EOFEException:

  • 问题内容: 我正在学习Java套接字编程。我使用以下语句连接到网站: 当我调试应用程序并查看s的内容时,我看到: 1)我想知道此本地端口7846的来源以及确切的含义。 2)如果网站的IP地址是2.21.246.97,为什么我不能仅在浏览器的地址栏中输入2.21.246.97来连接到该网站? 谢谢 问题答案: 这是本地套接字端口号。通常由系统分配。 请参阅什么是套接字?。 在客户端:客户端知道运行服

  • 我想创建能够与多个客户端连接的服务器,但我总是收到“套接字关闭”异常或从输入流中读取空值,以前我认为这是由于以错误的方式关闭套接字连接引起的,所以我发布了这个主题,但现在似乎这不是问题所在。 服务器方法 HandlerThread类 客户端模拟器 例外和问题 在客户端模拟器之前启动服务器,客户端模拟器没有任何异常,但是在服务器端,并没有收到所有数据,从控制台打印信息时,我看到“null”、“Hel

  • 我最近一直在玩套接字,但是我遇到了一个问题…当我从服务器接收数据时,我得到一个“java.net.套接字异常:套接字关闭”异常。我没有在任何地方关闭套接字,事实上,我唯一使用关闭()的地方是扫描仪上从System.in读取文本; 以下是我的代码: 客户: 服务器: 数据包发送者: 客户端接收器: 数据包接收器:

  • 我做了一个应用程序,其中android应用程序将数据发送到java桌面摇摆应用程序,以及通过wifi使用TCP套接字编程将数据从桌面发送到android。 该应用程序是一个酒店厨房订单预订系统 该问题描述了Dine\u Tables类包含表示酒店中每个桌子的按钮,例如,单击table1按钮时,它会启动BackgroundServers Asyntask,它运行服务器以接收桌面应用程序数据,还从Di

  • 问题内容: 我最近一直在将SSL套接字用于消息传递系统。 我终于开始使用CA颁发的证书。我将其导入到密钥库中,设置了密钥库属性,并启动了客户端,但是当我尝试发送数据时,我一直收到握手异常。 我启用了调试模式,发现这是由于造成的。有什么想法吗? 如果有帮助,它还说它忽略了TLSV1和TLSV1.1中的大约10个密码套件。 我还安装了无限强度加密策略。 客户代码 服务器代码 编辑: 我刚刚添加了密码,