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

时间:2014-05-19 13:28:25

标签: java sockets

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

2 个答案:

答案 0 :(得分:2)

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

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

然后,您可以测试Socket.isClosed()以验证您是否仍然可以写信息。

答案 1 :(得分:1)

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

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