概述
在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大。本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线会话记录中的计数标志值来实现心跳异常的检测,以此决定客户端是否已经断开连接以及删除其在线会话记录。
基本思路:①客户端定时给服务器发送心跳包(案例中定时时间为3秒);
②服务器创建一个心跳检测的线程,线程中每隔3秒对用户在线会话记录中的计数器进行加1操作(初始值为0);
③服务器每次收到客户端的心跳包后,都将其在线会话记录中的计数器清零;
④当心跳检测线程中检测到某用户计数器已经累加到数值为5时(说明已经有15秒未收到该用户心跳包),就判定该用户已经断线,并将其从会话记录中清除出去。
(注:案例中的会话记录是用链表实现的)
C语言代码实现案例:
客户端:
/*
**功能:客户端心跳包发送线程函数
**参数:线程传参(可传套接字)
**返回值:空
*/
void *send_heart(void *addr)
{
while(1){
pd->data_type = HEART; //HEART:数据包类型,pd为数据包结构体指针
write(client_sockfd,pd,sizeof(DATA_PACK));
sleep(3); //定时3秒
}
return NULL;
}
最后
以上就是甜甜小刺猬为你收集整理的c语言如何处理心跳标志,Socket心跳包异常检测的C语言实现,服务器与客户端代码案例...的全部内容,希望文章能够帮你解决c语言如何处理心跳标志,Socket心跳包异常检测的C语言实现,服务器与客户端代码案例...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复