免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2563 | 回复: 0
打印 上一主题 下一主题

[网络] linux TCP 心跳检测 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-27 11:29 |只看该作者 |倒序浏览
TCP服务,长连接。
    首先一个s(服务器)和一个c(客户端)建立TCP连接,S向C发送数据。C有两个线程:一个收数据;一个将数据保存到本地,保存成功以后向S回复一个确认。
    因为是长连接,所以要加一个心跳检测,C每隔100秒向S发一个心跳数据包,S收到包以后会给C一个回复。如果C没有在10秒内收到回复,则认为连接已经断了,则需要重新connect服务器。
基本功能实现了,现在缺少心跳检测功能。心跳怎么实现呢?听起来简单,实现起来发现不容易。
想到一个办法就是用定时器,客户端心跳线程在发心跳的时候启动一个定时器,如果定时器超时则
重新连接服务器。如果接受线程收到服务器的心跳回复数据包,则删除定时器。
按我的想法
心跳线程:
while(1)
{
    sleep(100);//
    if (0 == flag)
    {
        break;
    }
    init_timer(&xxx);
    xxx.function = fun();//func为超时函数,比如超时就置标志位为0: flag = 0;
    add_timer
}
connect();//跳出while重新连接。
接收线程:
for( ; ; )
{
    read(sock, buf[], n);
    switch (buf[0])
      case data: xxx;break;
      case 心跳回复: del_timer(&xxx);break;
}   

各位大牛指点一下啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP