首页新闻找找看学习计划

C# 如何判断Socket是否已经断开

0
悬赏园豆:10 [已解决问题] 解决于 2018-12-28 14:13

普通的正常断开连接已经可以处理,现在主要是对方拔网线、断电关机等特殊情况,这种现在没办法检测到。

请教一下各位。

放纵的野性的主页 放纵的野性 | 初学一级 | 园豆:5
提问于:2018-11-16 16:38
< >
分享
最佳答案
0

百度搜一下socket 心跳包 。

收获园豆:10
s_p | 菜鸟二级 |园豆:269 | 2018-11-17 08:46
其他回答(2)
0

简单啊,保持心跳呗。
没有心跳就表示已经死亡了。

爱编程的大叔 | 园豆:29788 (高人七级) | 2018-11-16 16:40

现在做了心跳:
!((c.Client.Poll(1000, SelectMode.SelectRead) && (c.Client.Available == 0)) || !c.Client.Connected)

但是这种方法,对方关机检测不到。

支持(0) 反对(0) 放纵的野性 | 园豆:5 (初学一级) | 2018-11-16 16:44

@放纵的野性: 心跳的意思是,
我发PING,需要收到PONG,多久没收到,我就当对方已经死了。
一个PING+一个PONG构成完整的心跳。

或者是客户端每隔一个时间发送PING给服务器,服务器多久没收到PING,就把客户端踢下线。

支持(0) 反对(0) 爱编程的大叔 | 园豆:29788 (高人七级) | 2018-11-16 16:54

@爱编程的大叔: 这个可能没办法,对方用的是4G网

支持(0) 反对(0) 放纵的野性 | 园豆:5 (初学一级) | 2018-11-16 17:00

@放纵的野性: 这和4G网啥关系?
啥不行?网速还是对方对你爱理不搭?

支持(0) 反对(0) 爱编程的大叔 | 园豆:29788 (高人七级) | 2018-11-16 17:06
1

try catch

jqw2009 | 园豆:1891 (小虾三级) | 2018-11-16 16:44

:)

支持(0) 反对(0) 放纵的野性 | 园豆:5 (初学一级) | 2018-11-16 16:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册