除了心跳包,还有什么办法判断socket意外断开?

ayun00 2012-10-29 09:54:16
我的服务端 基本都是接受数据, 我又不想主动发数据到客户端去判断连接状态,客户端也有可能长时间静默,

请问我还有没有其他方法判断客户端意外断开?
...全文
496 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kation 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

引用 5 楼 的回复:

不发送数据,没有办法验证客户端连接是否异常,做法要么是应用层发数据验证,要么是使用TCP的keep alive保活定时器发数据验证。keep alive可参考http://www.cnblogs.com/wzd24/archive/2007/05/22/755050.html

顶这个

实际应用中这种超时也是有问题的。特别……
[/Quote]
这种方式不就是心跳包么?只是系统帮你搞定了而已。
改一下间隔就行了吧?
足球中国 2012-10-29
  • 打赏
  • 举报
回复
心跳包是最有效的也最简单。
足球中国 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

不发送数据,没有办法验证客户端连接是否异常,做法要么是应用层发数据验证,要么是使用TCP的keep alive保活定时器发数据验证。keep alive可参考http://www.cnblogs.com/wzd24/archive/2007/05/22/755050.html

顶这个
[/Quote]
实际应用中这种超时也是有问题的。特别是网络不是断开而是阻塞的情况。
Kation 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

不发送数据,没有办法验证客户端连接是否异常,做法要么是应用层发数据验证,要么是使用TCP的keep alive保活定时器发数据验证。keep alive可参考http://www.cnblogs.com/wzd24/archive/2007/05/22/755050.html
[/Quote]
顶这个
Susiria 2012-10-29
  • 打赏
  • 举报
回复
不发送数据,没有办法验证客户端连接是否异常,做法要么是应用层发数据验证,要么是使用TCP的keep alive保活定时器发数据验证。keep alive可参考http://www.cnblogs.com/wzd24/archive/2007/05/22/755050.html
足球中国 2012-10-29
  • 打赏
  • 举报
回复
如果有别的办法就不会存在心跳包了。
放弃吧。
SocketUpEx 2012-10-29
  • 打赏
  • 举报
回复
我感觉如梦说反了吧

ayun00 2012-10-29
  • 打赏
  • 举报
回复
客户端 断网了 这种异常 ,服务端也能收到?

[Quote=引用 1 楼 的回复:]

socket连接一般都是若服务器断开了连接,客户端是不会报异常的
如果是客户端断开了连接,服务器是会出现异常的
断开都发送一条指定,当对方收到的若是这样的指令,就表明已经断开了连接
[/Quote]
wuyq11 2012-10-29
  • 打赏
  • 举报
回复
socket连接一般都是若服务器断开了连接,客户端是不会报异常的
如果是客户端断开了连接,服务器是会出现异常的
断开都发送一条指定,当对方收到的若是这样的指令,就表明已经断开了连接
wangyue4 2012-10-29
  • 打赏
  • 举报
回复
Receive函数等于0就代表断开(不要在一台机器上做此实验)
jason173 2012-10-29
  • 打赏
  • 举报
回复
调用Socket的Receive函数时会返回接收到的数据的长度,如果返回的长度小于等于零,说明客户端或服务器已经断开。

try
{
int rcvLen = ClientSocket.Receive(recData, maxRecLen, 0);
}
catch { }

if (rcvLen <= 0)//接收长度小于等于0,说明客户端连接断开。
{
return;
}
diecode 2012-10-29
  • 打赏
  • 举报
回复
果断使用心跳包

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧