欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C++ Socket心跳包在Windows环境下的实现 - 心跳检测的详细步骤

最编程 2024-08-08 22:44:23
...

1 客户端每隔一个时间间隔发生一个探测包给服务器
2 客户端发包时启动一个超时定时器
3 服务器端接收到检测包,应该回应一个包
4 如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
5 如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了

具体实现:
这里用到了 C++自带的 thread库
以下为简单实现的主要部分代码(开个线程不断的发送探测包,设定间隔多长时间一个)

#include <thread>
using std::thread;

//单开一个线程去不断地发探测包
thread heartTh = new thread(SocketThread::send_heart(线程执行调用的方法),(void*)this(该方法的参数));
heartTh ->detach();

//在h文件中为静态方法
void SocketThread::send_heart(void* arg)   
{
    //该类
	SocketThread* client = (SocketThread*)arg;
	while (true)
	{
		Sleep(3000);   //定时3秒  此处的单位为毫秒
		string tempdata = "";   //空包
		int result = client->SendData(tempdata);
		if (result<0) //result>0是发送成功的返回码  小于零就是发送失败
		{
			MessageBox(NULL, "Socket服务端已关闭!!!", "提示", MB_OK|MB_SYSTEMMODAL);
			break;
		}
		Sleep(5000);    //定时3秒  此处的单位为毫秒
	}
}


int SocketThread::SendData(string data)
{
	int result = send(s_server, data.c_str(), data.length(), 0);
	return result;
}

注:此篇是基于Socket实现链接的基础上进行心跳包的发送