Java套接字:检查客户端是否能够从服务器接收消息

当我从服务器的OutputStream flush()消息时,客户端是否收到消息(如果在超时之前断开连接)。 我需要以某种方式从服务器端控制这种情况,我必须知道客户端是否能够在发送之前接收消息。 怎么做?

在过去,我通常在单独的线程中使用阻塞读取来读取客户端消息并根据需要传播它们。

如果客户端断开连接,则InputStream.read()操作返回-1,我们将其视为客户端已“断开连接”并且应关闭InputStream的通知。 如果连接exception终止,它也可能抛出IOException。

然后,您可以测试Socket.isClosed()以validation您是否仍然可以编写消息。

我假设您正在使用TCP / IP连接:

TCP是面向连接的协议:每当发送消息包时,接收器必须以确认响应(该协议在应用层下,因此如果没有抛出错误,则可以假设已接收到消息)。 在发送之前无法知道是否会收到消息,但您可以假设如果连接处于活动状态,它将起作用。