CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

客户端执行了closesocket(),服务端怎么知道啊,谁给实例一下

楼主quick(我追)2005-08-04 18:57:52 在 VC/MFC / 基础类 提问

或者客户端不发心跳包,直接掉线,服务端怎么知道 问题点数:30、回复次数:12Top

1 楼dirdirdir3(风)回复于 2005-08-04 19:12:08 得分 0

closesocket()的话可以知道,服务端会收到消息在onclose里处理。直接掉线不知道,这时很容易出错。  
  因此建议发心跳包.Top

2 楼lianglp(寻找黄金分割点)回复于 2005-08-04 20:18:06 得分 0

用TCP建立连接的客户端,在调用closesocket时,会向服务器端发送Fin包,所有服务器端会  
  知道客户端要断开了,这时,服务器端TCP协议栈会通知上层的。  
  如果中间突然断掉,比如说需经过路由器的,这是路由器没电了等等,客户端跟服务器端是  
  根本不知道的。所以要防止这种情况,需要定时向一方发送相关的数据,另一方返回应答。  
  如果在指定的时间内没返回应答,可视为断开。Top

3 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-08-04 20:21:44 得分 0

还是用心跳包来检测Top

4 楼quick(我追)回复于 2005-08-04 21:30:55 得分 0

心跳包我知道了,我想知道   lianglp()   (   )   说的“在调用closesocket时,会向服务器端发送Fin包,所有服务器端会知道客户端要断开了”  
  这个怎么实现,给点参考的东西,谢谢Top

5 楼quick(我追)回复于 2005-08-05 01:03:36 得分 0

大家帮下忙,这个fin包怎么检测Top

6 楼anuoa(灌水哥)回复于 2005-08-05 02:20:08 得分 0

比如   ServerSocket与客户端连接,看ServerSocket是否等于SOCKET_INVALID   若是则客户端关闭,否则没有关闭Top

7 楼quick(我追)回复于 2005-08-06 02:53:52 得分 0

用select()   如何检测,谢谢Top

8 楼yingpf(阿飛)回复于 2005-08-06 17:23:22 得分 0

好像是不是有个FD_CLOSE的消息,不太清楚select可不可以检测这个通知。Top

9 楼younggle(洋溢)回复于 2005-08-06 17:27:38 得分 0

如果不是程序本身的原因而引起来的连接断开,我们的程序是不可能知道对方断开的。所以要发送心跳包来维护的。Top

10 楼younggle(洋溢)回复于 2005-08-06 17:30:32 得分 15

if(   select()   )  
  {  
        int   nResult   =   recv();  
        if(   nResult   <   0   )  
        {  
                  //断开了  
        }  
        else   if(nResult   ==   0)    
        {  
              if(   GetLastError()   ==   0   )  
              {  
                  //断开了  
              }  
        }  
  }Top

11 楼hyg2008(蓝色雨)回复于 2005-08-06 19:13:03 得分 5

markTop

12 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-08-07 00:26:00 得分 10

不一定全对,不过你可以参考参考:  
   
  判断客户端是否断开  
  http://www.xiaozhou.net/cooldog/blogview.asp?logID=96Top

相关问题

  • 我在.net Remoting编程中,需要将一个class的实例作为执行结果返回到客户端,不知道怎么做?
  • 怎样不执行SELECT SQL语句即可获得ResultSetMetaData实例????
  • 这段socket的代码为什么执行recv这个语句后就closesocket不释放端口连接了?
  • (小菜一碟?)怎样让程序重复执行时自动转到已有的实例中?
  • 请问程序怎样检测自己是否已经在执行着一个实例?
  • 一个tns,两个数据库实例,为何执行svrmgrl总是只能登陆其中的一个?
  • 请问在C#中如何保证一个执行文件只有一个实例?
  • 求一个完整点的socket的重叠I/O的实例,和完成端口的实例.
  • 怎样知道一个实例的监听端口号
  • 实例化一个类时,会执行类的new()构造函数,当销毁一个类时,会执行哪个sub?

关键词

  • 客户
  • 服务器
  • 检测
  • 连接
  • 客户端
  • 断开
  • closesocket
  • 服务器端
  • 知道
  • 服务端

得分解答快速导航

  • 帖主:quick
  • younggle
  • hyg2008
  • kugou123

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo