【问题标题】:Java: Prevent Socket DataInputStream from throwing EOFExceptionJava:防止 Socket DataInputStream 抛出 EOFException
【发布时间】:2019-01-24 07:41:22
【问题描述】:

我的客户端/服务器应用程序当前每次想要发送/接收数据时都会打开和关闭新连接。我正在尝试对其进行更改,以便它具有一个持久连接。

我遇到的问题是服务器上的套接字 DataInputStream 一直抛出 EOFException,而我只是希望它阻塞直到它接收到下一批数据。

我想过只是像这样简单地编写服务器......

while socket is open {
    while at socket's DataInputStream's EOF {
        wait a second
    }
    //If we're here, then we have some data
    do stuff
}

...但这非常丑陋,并且在收到一些数据之前不是正确的阻塞方式。

有没有更简洁的方法告诉套接字阻塞,直到有一些数据要读取?我试过 read() 和 readFully(),但都不管用。

【问题讨论】:

  • 一个套接字确实会阻塞,直到有数据要读取(除非你以某种方式从非阻塞 SocketChannel 获得了那个套接字)。如果你得到一个 EOF 异常,那是因为远程端关闭了套接字,所以你需要弄清楚它为什么这样做。
  • 这确实是问题所在。感谢您的快速回复!

标签: java datainputstream eofexception


【解决方案1】:

如果您收到 EOFException,则表示连接已断开。您不能等待已关闭的连接。继续处理您的客户端代码,使其不会关闭连接。在服务器端,任何读取方法都会阻塞,直到数据可用,而无需您进一步努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2013-02-16
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多