2013-02-24 70 views
0

的损失我有一个客户端,并在Java服务器程序。服务器通过wifi向客户端发送数据。在客户端断开wifi连接会导致它抛出异常并退出接收循环。服务器仍然继续发送数据。服务器使用的方法是oos.writeObject()。如何检测服务器端客户端的无线网络断开并导致服务器退出发送循环?检测连接

+0

TCP或UDP或其他协议? – Celada 2013-02-24 16:53:01

+0

使用的协议是TCP。 – user1761399 2013-02-25 03:16:06

回答

0

之所以你的客户端(在某些类型的WiFi连接的故障模式),当连接消失马上注意到是因为WiFi接口是本地客户机和操作系统,只要它是眼泪下来检测为关闭。从服务器的角度来看,这是一个遥远的网络链接失败。

当连接出现故障,在第一服务器将继续缓冲数据。如果缓冲区(服务器的操作系统缓冲区加上TCP窗口大小)变满,则服务器将尝试发送更多数据时阻塞。

以后,如果连接仍然向下,服务器将宣布该连接超时,你会得到一个异常。如果连接恢复,则缓冲区将清空并恢复正常的数据流。

即使你能,你实际上并没有想出来马上改变的事情,使服务器的连接时候,任何遥远的网络跳失败。如果你这样做了,你的连接就会非常脆弱:每一次小的网络重新聚合事件或短暂的短暂故障都会破坏你的连接。

+0

非常感谢您的解释。我只需要知道是否有一些方法类似于setSoTimeout()进行读取,可以在此使用,以便在固定持续时间后至少关闭连接。 – user1761399 2013-02-26 03:28:51

+0

肯定的是:你可以使用的信号,或取消在做文字线程,或者使用非阻塞I/O和插座后放弃还没来供所需的时间量之后写,等... – Celada 2013-02-26 14:33:24

+0

灿你直接指向一些使用非阻塞I/O或信号放弃写入的链接。我们如何检测到套接字不可用于写入? – user1761399 2013-03-16 16:03:47