日期:2014-05-20  浏览次数:20899 次

如何判断当前socket的连接有效性
需求:
服务器端S保持住每个客户端C的连接,将消息转发到另一个终结点D。当D处理完成后返回结果到S,S将结果再发送到C。

实现思路:
S将为每个连接L生成唯一ID后存储到Dictionary,然后转发到D,D返回结果,S查找结果中ID对应的L,将结果发送到C。

问题:
判断每个L的有效性,无效就释放资源。

各程序语言:
S   :   c#
C   :   vc6  
D   :   c#

已用过的方法:
S中单独线程对每个L进行无阻止0字节的发送,如果发送成功或返回错误代码为10035的错误,表示连接有效。如果S和C都为c#语言,则测试通过(C不会收到任何数据)。但是和VC6的程序测试时发现C总是收到0长度数据。因为C收到数据后就会断开连接,但这并非最终结果,所以此方法不可行。

------解决方案--------------------
貌似比较困难吧。
比如网线突然被剪断的情况,就无法处理了。

可以加个心跳机制。
------解决方案--------------------
加心跳線吧。