在TCP/IP Socket开发中,服务器如何能尽快得知某个客户端掉线了?

freegoal 2004-07-12 03:33:14
由于互联网并不稳定,服务器如何能尽快得知某个客户端掉线了?

我本来想通过send函数的错误码来得知,但是不行,我在局域网做了下面的试验:

服务器(Linux)每隔5秒给客户端发送一段数据(客户端不用答复的),在运行过程中将客户端(W2k)的“本地连接”禁用,客户端能马上得知连接中断啦,但服务端一直都在发送数据,并没有出现错误。

请问,这是怎么回事?服务器如何能尽快得知某个客户端掉线了?谢谢!
...全文
806 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
arvid_gs 2004-07-14
  • 打赏
  • 举报
回复
心跳检测
blueboynjupt 2004-07-14
  • 打赏
  • 举报
回复
最实用的是另开一条状态通道,传送心跳信息。这样一来不影响原来的数据通道,二来使得C和S之间彼此通晓对方的状态。
fengge8ylf 2004-07-14
  • 打赏
  • 举报
回复
客户端往服务器上发心跳包 服务器维护一个计数 每秒钟使这个计数增1同时检测这个计数是否大于一个值 大于的话则表明客户端异常关闭了 当服务器收到客户端发来的心跳包后就把这个计数置为0
sybsyb 2004-07-13
  • 打赏
  • 举报
回复
不用心跳检测
使用select等待socket事件时,如果recv返回0,代表客户端已断开连接
nicememory 2004-07-13
  • 打赏
  • 举报
回复
客户端发送比较合理
awjx 2004-07-13
  • 打赏
  • 举报
回复
心跳检测到底是客户端往服务器发数据还是
服务器向客户端发数据
个人理解都可以
但一般是采用哪种呢?。
cai3995 2004-07-13
  • 打赏
  • 举报
回复
use the setsockopt() function
the TCP protocol keep the connect statement by default setting
jiutian 2004-07-13
  • 打赏
  • 举报
回复
to sybsyb(苏永邦):
1。你这种方法只能检测TCP正常断链,但有些异常断链的情况是检测不出来的。
2。无法检测UDP连接。

to tccsdn(程序||乱码):
所谓心跳检测包客户端定时向服务器发包,服务器定时检测是否收到某一客户端的包,如果在某一段时间内(大于客户端发包的时间)都收不到,则认为该客户端已断开连接。
tccsdn 2004-07-12
  • 打赏
  • 举报
回复
心跳检测包 怎么实现??
jiutian 2004-07-12
  • 打赏
  • 举报
回复
最好是通过心跳检测包来验证一个连接是否正常。而且不管是TCP还是UDP连接,都可以进行处理。属于比较实用的方法。
Fly1980 2004-07-12
  • 打赏
  • 举报
回复
客户端不断的隔一段时间就往服务端发小数据以证明其在线.
服务端若超过时间还没收到数据就认为客户端断线了
Fly1980 2004-07-12
  • 打赏
  • 举报
回复
心跳检测

4,386

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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