网络心跳包处理

         以前在学习Socket编程时都只是简单的调用微软的API函数,很少考虑网路的异常处理。在做实际的项目中网路异常是必须要考虑到的。

  网路断开掉线异常处理:   HeartBeat 网络心跳包

     一下是个人理解,网络心跳包的处理方式有两种“

           方式一:  终端主动发起,  服务器记录各个终端最后一个包的时间点,然后定时扫描全部客户端,如果扫描时间点与上次收包时间点相隔时间大于超时时间,则

超时事件发生。服务器清除客户端信息记录。

          方式二: 服务器主动发起, 服务器定时发送心跳包,通过记录客户端连续多少次未有回应,则认为超时事件发生。如果多次没有收到回应但在一定范围内又收到回应,

则清除记录。如果连续未收到回应达到一定量,则默认网络异常发生。

  1. typedef struct tagSocketPacket  
  2. {    
  3.        CString tagStrDeviveID;  
  4.        SOCKET  tagSocket;  
  5.        SYSTEMTIME  tagRecTimer;  
  6. }SocketPacket,*pSocketPacket;  
  7.   
  8.   
  9. typedef vector<SocketPacket> vectorSocketPacket;  
  10. void HeartBeat(SOCKET socket)  
  11. {  
  12.     SYSTEMTIME timer;  
  13.     SocketPacket  socketPacket;  
  14.     vectorSocketPacket::iterator it;  
  15.     for (it = myVectorPacket.begin(); it != myVectorPacket.end(); it++)  
  16.        {  
  17.         if (socket == (*it).tagSocket)  
  18.         {  
  19.             GetSystemTime(&timer);  
  20.             socketPacket = (*it);  
  21.             socketPacket.tagRecTimer = timer;  
  22.             myVectorPacket.erase(it);   
  23.             VectorPacket_insert(socketPacket);  
  24.             break;      
  25.         }  
  26.     }     
  27. }  
  28.   
  29. void VectorPacket_insert(SocketPacket socketPacket)  
  30. {  
  31.     myVectorPacket.push_back(socketPacket);  
  32. }  
  33.   
  34. BOOL IsTimeOuts(SYSTEMTIME Timer)  
  35. {  
  36.     SYSTEMTIME sysTimer;  
  37.     GetSystemTime(&sysTimer);  
  38.     DWORD times1, times2;  
  39.       
  40.     times1 = Timer.wHour*3600+Timer.wMinute*60+Timer.wSecond;  
  41.     times2 = sysTimer.wHour*3600+sysTimer.wMinute*60+sysTimer.wSecond;  
  42.       
  43.     if (times2 - times1 > TIMEOUTS)  
  44.     {  
  45.         return TRUE;  
  46.     }     
  47.     return FALSE;  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值