`
love19820823
  • 浏览: 973848 次
文章分类
社区版块
存档分类
最新评论

TCP,socket 心跳检测

 
阅读更多
一、什么是心跳检测

判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。

基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。

代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。

发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。

一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是相反。

二、关于Send函数的返回值

我们知道当客户端以优雅的方式断开TCP连接后,服务器使用Send函数发包,得到的返回值为0(说明TCP连接已断开)。然而,SEND函数的成功返回只能表示发送数据已经进入了SOCKET内核的发送队列,不一定就已经在线上或者已经被成功接收了。这可能是因为send只是往发送缓冲区拷贝数据, 刚开始缓冲区还未满,所以不会有错误发生, 只有等到相当一段长的时间后, send的返回值才会为-1。

三、定时Ping

如果服务器不能进行心跳检测的应答。可以采用定时Ping某服务器来检测TCP连接是否断开,如新浪(必须允许Ping的服务器)。PING是向远程主机发送一个ICMP包,如果给定时间内没有接收到回应就认为是超时,如果收到回应则分析接收到的ICMP包,得到TTL、类型以及用时。

不过Ping包有32字节,如果是无线连接,有时需要考虑流量问题。

四、使用TCP存活定时器

分享到:
评论
1 楼 kchiu 2014-11-17  
说的都是废话

相关推荐

    基于MFC的TCP心跳检测包

    心跳检测是TCP通信中一个重要的机制,用于确保网络连接的稳定性和可靠性。本话题将围绕“基于MFC的TCP心跳检测包”展开,深入探讨相关知识点。 MFC(Microsoft Foundation Classes)是微软提供的一套C++库,它为...

    socketTCP通信心跳包实例

    在Winform应用中实现socket心跳包,通常包括以下几个步骤: 1. 创建Socket对象:在C#中,使用`System.Net.Sockets.Socket`类创建一个Socket实例,指定协议类型为TCP(`SocketType.Stream`)和IP协议族(`...

    Qt使用tcp实现的简单服务端和客户端(带心跳检测)

    在本文中,我们将深入探讨如何使用Qt库通过TCP协议实现一个简单的服务端和客户端,并加入心跳检测机制。Qt是一个跨平台的应用程序开发框架,广泛应用于GUI应用,同时也支持网络编程,包括TCP通信。 首先,我们要...

    socket心跳测试(java)

    本篇将详细探讨如何使用Java进行socket通信,特别是实现心跳检测机制,以确保长连接的稳定性和可靠性。 首先,我们需要理解“心跳”在计算机网络中的含义。心跳检测是一种机制,用于检查网络连接是否仍然活跃。在...

    Android 心跳检测的Socket

    由于移动设备的网络的复杂性,经常会出现网络断开,如果没有心跳包的检测,客户端只会在需要发送数据的时候才知道自己已经断线,会延误,甚至丢失服务器发送过来的数据。一下简单建立一个带有心跳检测的SocketDemo。

    TCP通信心跳包源码C语言实现

    在TCP(传输控制协议)中,心跳包是一种保持连接活性的机制,主要用于检测网络连接是否仍然有效,防止因网络静默导致的连接超时或断开。本篇将详细讲解如何使用C语言在Linux平台上实现TCP心跳包的功能,并探讨其核心...

    vc tcp socket 1台服务器连3台客户机_下线及时通知(即心跳保持也叫心跳检测技术)

    本话题主要探讨了如何使用VC++(Visual C++)实现TCP Socket通信,特别是在一个服务器与多客户端连接的场景下,实现“心跳检测”或“心跳保持”技术以确保连接的稳定性和及时检测客户端下线的情况。 首先,TCP...

    TCP长连接Socket心跳收发消息

    实现TCP长连接Socket心跳收发消息的过程通常包括以下步骤: 1. 建立TCP连接:客户端发起连接请求,服务器响应,完成三次握手。 2. 设置心跳间隔:双方协商并设置合适的心跳间隔时间,比如30秒或60秒。 3. 发送心跳...

    Android的socket长连接(心跳检测)

    下面将详细介绍Android中实现Socket长连接以及心跳检测的相关知识点。 1. **Socket基础知识** - Socket是网络编程的基本组件,它提供了进程间通信(IPC)的能力,特别是在分布式系统中,通过TCP/IP协议在不同主机...

    C# Socket心跳包跟图片传输,TCP/IP协议响应Demo供学习之用

    在本Demo中,可能采用了单独的线程处理心跳包,这样可以确保心跳检测不影响主线程上的数据传输。 5. **图片传输**: 图片传输是Socket应用的一个实例,通常涉及二进制数据流的处理。在C#中,可以使用FileStream...

    Android socket局域网的UDP广播自动连接及TCP/ip通讯与心跳检测

    简单的Android Socket 编程实例,有单独的客户端及服务器端源码。两台Android设备同时连接同一个WiFi...代码实现心跳检测,当服务器断网或是结束进程,客户端可重新连接(重连部分自己实现);代码有点凌乱,仅供参考!

    c#心跳连接实时检测网络通断情况

    心跳检测通常分为两部分:发送心跳和接收心跳。在客户端,我们可以设置一个定时器,每隔一定时间向服务器发送心跳包,例如一个空字符串或特定的标识。在服务器端,接收到心跳包后应立即回应,表示已收到并准备好继续...

    TCP socket通信实例(心跳)

    ### TCP Socket通信实例:心跳机制详解 #### 一、引言 在计算机网络通信中,TCP(Transmission Control Protocol)作为一种面向连接的协议,为数据传输提供了可靠的保障。然而,在实际应用中,网络环境可能会出现...

    tcp socket

    在实际应用中,TCP Socket客户端通讯插件可能还包括错误处理、超时重试、心跳机制等功能,以提高通信的稳定性和可靠性。心跳机制是为了检测连接是否仍然有效,通常通过定时发送小量数据来实现。超时重试则是在数据...

    Android下Tcp通信心跳实例

    6. **心跳检测**:如果在规定时间内未收到服务器的回应,客户端应认为连接可能已经丢失,并尝试重新连接或通知用户。 7. **异常处理**:在Android中,由于网络环境变化、设备休眠等因素,TCP连接可能会突然断开。...

    winform socket通讯和心跳包

    心跳包定期发送,以确认连接仍然活跃并检测可能的网络问题。 6. **实现心跳包机制**:在Winform Socket通信中,心跳包通常由服务器或客户端定时发送。这些包包含简短的信息,比如“心跳”或特定的标识符,表明发送...

    C# 实现Scoket心跳机制的方法

    心跳检测步骤可以分为五步: 1. 客户端每隔一个时间间隔发生一个探测包给服务器 2. 客户端发包时启动一个超时定时器 3. 服务器端接收到检测包,应该回应一个包 4. 如果客户机收到服务器的应答包,则说明服务器正常...

    Java心跳包功能TCP实现

    在Java编程中,心跳包(Heartbeat Packet)是一种在网络通信中维持连接活性的重要机制,尤其在TCP协议下,心跳包可以解决长连接因网络延迟或静默而导致的连接超时问题。TCP是一种面向连接的、可靠的传输层协议,它...

    Android Socket连接(心跳检测,断线重连,状态监测等)新资源包

    Android Socket连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909

    C#使用Socket实现心跳的方法示例

    "C#使用Socket实现心跳的方法示例" C#使用Socket实现心跳的方法示例是指通过使用Socket编程来实现心跳机制的方法。心跳机制是指在网络通信中,通过定期发送心跳包来维持连接的机制,以避免连接超时或断开。 在C#中...

Global site tag (gtag.js) - Google Analytics