到达EOS后重置Java Socket的InputStream

时间:2010-03-22 13:11:52

标签: java sockets inputstream java-io

我正在尝试通过TCP / IP套接字连接两个单独的应用程序。在这种情况下,这两个应用程序都不是作为另一个应用程序的“客户端”运行,将它们描述为需要相互通信的两个独立服务器会更容易。

要接收我正在使用InputStream.Read()函数的数据,一旦收到-1的值,就应该停止处理。但是,现在问题是如果另一组数据出现InputStream已经在流的末尾(EOS),那么所有发送的新数据都将被丢弃或忽略。我找到解决这个问题的唯一方法是,一旦达到End of Stream,我关闭套接字并重新打开它,我认为可能会以其他方式更好地处理它。

如何重置InputStream以便为下一组可能出现的数据做好准备?

1 个答案:

答案 0 :(得分:4)

从TCP / IP套接字读取时,您正在获取EOS,因为另一端已关闭其套接字的写入端。一旦发生这种情况,TCP / IP协议就无法“取消关闭”连接。

如果您不想打开新连接,则需要在TCP / IP传输协议之上的应用程序协议,该协议允许您表示每个逻辑数据集的结尾...而不需要关闭。