一般来说,只需要send或者recv一下,如果结果为零,则为掉线。
1.当recv返回值为0是表示对方已经正常(MSDN说是完美的)的断开连接.
2.当recv返回SOCKET_ERROR时,说明对方已经断开连接,但是可能是非正常断开(断网或者客户端进程结束).
如果你担心在读的时候被阻塞,使用select(这个不太懂)
但是,在长连接下,有可能很长一段时间都没有数据往来。此时则需要心跳机制,TCP本身自带了心跳机制。
如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。
所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。
总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。

最新文章

  1. 再谈C#采集,一个绕过高强度安全验证的采集方案?方案很Low,慎入
  2. C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》
  3. Selenium 代码收集
  4. Best Time to Buy and Sell Stock with Cooldown
  5. 如何在maven项目的pom.xml文件中添加jar包
  6. Spring基础—— 在 Spring Config 中使用外部属性文件
  7. JAVA多用户商城系统源码
  8. javascript笔记08:javascript的if...else语句
  9. Django 创建第一个项目(转)
  10. Oracle中使用profile管理用户口令
  11. Nginx 配置指令的执行顺序(四)
  12. Openjudge-NOI题库-和数
  13. Django--基本篇:项目结构与设计模式(MVC)
  14. Python3学习之路~7.4 动态导入模块
  15. python3 电脑说话
  16. [c/c++] programming之路(17)、高级指针
  17. 自己理解Java中的lambda
  18. 【转载并整理】ORACLE锁机制
  19. js页面加载完后执行(document.onreadystatechange 和 document.readyState)
  20. shell 按行读取文件

热门文章

  1. 《Hive编程指南》—— 读后总结
  2. Ucos系统任务间的通信详解
  3. PHP中有关正则表达式的函数集锦
  4. Android随笔之——PackageManager详解
  5. iOS chart 图表完美解决方案 基于swift
  6. 使用Oracle调度程序自动完成任务
  7. 1Z0-053 争议题目解析577
  8. Spring学习笔记--环境搭建和初步理解IOC
  9. HTML5 视频(二) <video> 使用 DOM 进行控制
  10. JAVA keytool 使用详解