我正在尝试通过 TCP/IP 套接字连接两个单独的应用程序。在这种情况下,两个应用程序都不作为另一个应用程序的“客户端”运行,将它们描述为两个需要相互通信的独立服务器会更容易。
为了接收数据,我使用了 InputStream.Read()
函数,一旦接收到 -1
值,它就应该停止处理。然而,现在的问题是,如果另一组数据出现,InputStream
已经位于流末尾 (EOS
),因此所有正在发送的新数据都会被丢弃或被忽略。我发现解决这个问题的唯一方法是,一旦到达流结束,我关闭套接字并重新打开它,我认为这可能可以通过其他方式更好地处理。
如何重置 InputStream 以便为可能出现的下一组数据做好准备?
最佳答案
从 TCP/IP 套接字读取数据时,您会收到 EOS,因为另一端已关闭其套接字的写入端。一旦发生这种情况,TCP/IP 协议(protocol)就无法提供“取消关闭”连接的方法。
如果您不想打开新连接,则需要 TCP/IP 传输协议(protocol)之上的应用程序协议(protocol),该协议(protocol)允许您表示每个逻辑数据集的结束……而无需关闭。
关于java - 到达EOS后重置Java Socket的InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492412/