日期:2014-05-18  浏览次数:20923 次

怎样捕捉Sock,NetworkStream掉线
用Sock,NetworkStream写的服务端/客户端系统,当客户端或服务端掉线后,没抛出异常.

请问怎样捕捉掉线情况.

------解决方案--------------------
掉线后,短时间内你调用send时候 并不会立刻抛出异常..第二次调用才会引发异常.

我现在的做法是: 5秒ping一次. 客户端和服务器自定义ping格式. 如果服务端间隔规定的ping时间没收到客户端的ping 就说明客户端已经断开.可以抛弃
------解决方案--------------------
socket设计的基础是假定不知道当前状态,事实上也不可能立即(immediately)随时知道是否连接
所以设计者考虑在read/write时抛出异常来反映给client,除非主动断开连接会有握手
那你要根据这个概念去写,
就是在write时catch断开的异常,其次如果需要知道大概的连接状态,则是定时由client向server发送心跳包来维护当前状态。

May it helps.