根据 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/