检测连接丢失

时间:2013-02-24 07:06:01

标签: sockets tcp client

我在java中有一个客户端和一个服务器程序。服务器通过wifi向客户端发送数据。在客户端断开wifi连接会导致它抛出异常并退出接收循环。服务器仍然不断发送数据。服务器使用的方法是oos.writeObject()。如何检测服务器上客户端的wifi中断并导致服务器退出发送循环?

1 个答案:

答案 0 :(得分:0)

你的客户端(在wifi连接的某些类型的故障模式下)在连接消失时立即注意到的原因是因为wifi接口是客户端本地的,并且操作系统一检测到就会将其断开如此。从服务器的角度来看,这是一个失败的遥远网络链接。

当连接断开时,服务器首先会继续缓冲数据。如果缓冲区(服务器的操作系统缓冲区加上TCP窗口大小)变满,则服务器将在尝试发送更多数据时阻止。

稍后,如果连接仍然关闭,服务器将声明连接已超时,您将收到异常。相反,如果连接恢复,缓冲区将清空,正常的数据流将恢复。

即使你可以,你实际上并不想改变一些东西,这样当任何遥远的网络跳跃失败时,服务器的连接会立即超时。如果你这样做,你的连接将非常脆弱:每次小网络重新收敛事件或短暂的短暂故障都会破坏你的连接。