社区
C#
帖子详情
除了心跳包,还有什么办法判断socket意外断开?
ayun00
2012-10-29 09:54:16
我的服务端 基本都是接受数据, 我又不想主动发数据到客户端去判断连接状态,客户端也有可能长时间静默,
请问我还有没有其他方法判断客户端意外断开?
...全文
496
12
打赏
收藏
除了心跳包,还有什么办法判断socket意外断开?
我的服务端 基本都是接受数据, 我又不想主动发数据到客户端去判断连接状态,客户端也有可能长时间静默, 请问我还有没有其他方法判断客户端意外断开?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
果断使用心跳包
Android
Socket
连接(心跳检测,断线重连,状态监测等)
Android
Socket
连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909
C#
socket
通信项目,实现了实现了心跳、断线重连、服务端异步接收数据、消息回调反馈、解决了粘包相关问题,可以多客户端
C#
socket
通信(免积分下载),本项目有三个部分:1、客户端(winform);2、服务端(winform);3、
socket
功能类库模块(其他项目也可以引用),
socket
类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序运行状况,可以有多个客户端发送消息,服务端可以广播消息也可以定向发送给某个客户端
netty心跳通讯代码讲解与生成exe的课程
本课程主要基于netty框架的源代码,实现netty客服端与服务端的心跳通讯,主要分为三个步骤,第一是释放源代码。第二是源代码讲解。第三是源代码的客户端与服务端的心跳实验。
Android 心跳检测的
Socket
由于移动设备的网络的复杂性,经常会出现网络
断开
,如果没有
心跳包
的检测,客户端只会在需要发送数据的时候才知道自己已经断线,会延误,甚至丢失服务器发送过来的数据。一下简单建立一个带有心跳检测的
Socket
Demo。
vb.net通过
socket
实现简易多人聊天室(含心跳检测机制)
语言vb.net (c#可以参考)+winform开发,利用
socket
进行多个客户端通信实现简易的聊天室,为了保证客户端与服务端连接正常,增加心跳检测机制、客户端定时
断开
超时未发送
心跳包
的客户端机制。 界面比较粗糙,仅供学习
socket
者参考
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章