java - DataInputStream 的 read() 中的 -1 是什么意思?

标签 java sockets

根据 Java 文档,read() 方法返回:

  • -1 如果没有更多数据因为已经到达流的末尾

我不太明白他们所说的“流结束”是什么意思。

目前我会在发生这种情况时关闭/重新打开套接字(我从很多谷歌搜索中了解到这是一种可接受的处理方式)。 -1 可能是“正常”行为吗?我不应该做出如此剧烈的 react 吗?也许只对 IOException 感到不安会更好?

套接字创建:

clientSocket = new Socket(InetAddress.getByName(remoteHost), remotePort, InetAddress.getByName(sourceIpAddress), 0);

一些背景信息:

  • 我在创建套接字时使用了“localAddr”属性(项目要求)
  • 我在 Windows XP SP2 下运行
  • 我不知道远程服务器如何处理套接字(甚至是什么语言,这无关紧要)
  • 这种情况很少发生(可能一天一次)
  • 只发生在一个运行 Linux 的特定远程客户端上
  • 麻烦的客户和我都在无数防火墙后面
  • 运行各种 XP 版本的客户端永远不会发生这种情况(也许是时候设置一个运行 Linux 的 VMware 镜像了!)

最佳答案

套接字的另一端已关闭流,因此没有更多数据可读 - 您已到达终点。我会使用 Wireshark 等网络监视器进一步诊断套接字关闭的原因。

关于java - DataInputStream 的 read() 中的 -1 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162905/

相关文章:

java - 如果子线程在调用get方法之前完成,则Java如何维护将来的任务结果

java - 整数数组开关Android JAva

android - 在 Android Marshmallow 中接收 UDP

node.js - socket.connect 上的 NodeJS errno 37

java - 双击textview android

java - 如何从 TextInputLayout 中删除底部填充

java - 在 fat jar 中编译应用程序时生成 jasper 报告的问题

node.js - 我应该使用 REST API 还是 Socket.io 作为地理定位应用程序?

java - 从 Socket.IO 线程内更新 View

c - 如何防止 socket() 系统调用返回文件描述符 0,1 或 2?