C#socket通信时,怎样判断socket双方是否断开连接

语言:C#问题:在socket通信时,怎么样判断socket双方是否断开连接我在Server端new了一个socket,然后bind,开了一个线程来accept前来连接的... 语言:C# 问题:在socket通信时,怎么样判断socket双方是否断开连接 我在Server端new了一个socket,然后bind,开了一个线程来accept前来连接的client,每接到一个client前来连接就新开一个线程和它进行通信。 我把Server端得到的socket放到一个集合里,我想知道集合里的socket是否断开连接,如果断开连接我就把它从这个集合里移除。 判断socket是否断开连接,网上有N种说法: 1.Socket.Connected 这个属性只能说明上一次通信时还是正常的。 2.Socket.Pool 这个方法是可以,但是它要从socket里读或写部分数据,如果其他线程从这个socket读写数据,那么数据将会出错。我在写一个远程通信软件时候就出现这个问题了。 而且http://technet.microsoft.com/zh-cn/system.net.sockets.socket.poll.aspx上这样说的: 此方法不能检测某些类型的连接问题,例如,网络电缆中断或远程主机意外关闭。您必须尝试发送或接收数据以检测这些类型的错误。 3.使用心跳包 每隔一段时间,socket一方向另一方发送一段特殊的数据,socket的另一方接到这个数据后回发回来。这样就能判断socket两方都没有掉线了。 请问:还有没有解决方案能快速准确判断socket双方是否断开连接? 如果您有解决方法,且测试成功,请不吝赐教,十分感谢。 如果您不能解决此问题,请不要回复,谢谢合作。 展开
 我来答
bobui
2011-10-21 · 超过10用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:23.9万
展开全部
双方发送心跳信号就好了,空闲下来就发送,成功代表还在连接中,连续几个心跳都不成功说明已经失败了
宛祯邓芙蓉
2019-10-02 · TA获得超过3772个赞
知道大有可为答主
回答量:3235
采纳率:30%
帮助的人:514万
展开全部
我开了两个QQ测试,比如一个是A,一个是B,A和B是好友,A点击离线,B几乎是同时显示A下线了。但是A被我用任务管理器给结束进程了,B还是显示A在线,过了一段时间才显示A掉线了。所以,我觉得还是用心跳包比较好,每隔一段时间对集合里的socket进行通信,如果没有接到回复超过一段时间,就认为它下线了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式