- 论坛徽章:
- 0
|
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;
}
各位大牛指点一下啊 |
|