判断客户端存活的问题

zxl200406 2010-06-22 04:32:10
是这样的
我服务器。保存了很多客户端连接的socket。

我一方面。要判断客户端是否存活。(加了定时器。判断)又得。操作客户端。发出一些操作指令
我判断是否存活。我发了垃圾数据过去。
send(socket,"d",1,0);


msg是一个结构体变量
我客户端。主线程中while(1)中一直去Recv(socket,(char*)&msg,sizeof(msg),0);

这个主线程会收到服务器发出的垃圾数据。。

我如何来才好啊。

我不想服务器判断存活的垃圾数据。来影响 我主线程中正常的接收啊
...全文
502 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
songtao_01 2010-06-23
  • 打赏
  • 举报
回复
struct tcp_keepalive {
u_long onoff;
u_long keepalivetime;
u_long keepaliveinterval;
};

#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)

void SetKeepAlive(SOCKET s)
{
tcp_keepalive live,liveout;
live.keepaliveinterval = 1000;
live.keepalivetime = 8000;
live.onoff = TRUE;

int op=1;
int ret = setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char*)&op,sizeof(int));
if(ret == 0)
{
DWORD dw;
if(WSAIoctl(s,SIO_KEEPALIVE_VALS,&live,sizeof(live),&liveout,sizeof(liveout),&dw,NULL,NULL)== SOCKET_ERROR)
{
}
}
else
{
}
}
hastings 2010-06-22
  • 打赏
  • 举报
回复
你最好自定义一个简单的协议,在每条通信的消息里加入包头,里面的变量表示发来的是什么数据;
比如:
struct PackHeader
{
int m_type;//数据类型,是心跳包还是什么
size_t m_len;//数据段的长度,这样你还可以一并解决粘包额问题
};
向立天 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zxl200406 的回复:]
大哥。能给一点源码吗?小弟。谢谢了
[/Quote]
心跳检测就是一种机制
服务器发一个检侧包(这个包你自己定义即可)
然后客户端如果接到就回复
如果一段时间以内服务器没有得到回复就认为对方掉线
这个没有什么源码不源码的
就是SendTo和Recieve了
kemee 2010-06-22
  • 打赏
  • 举报
回复
。。。刚想了解就看到心跳机制。。还带源码的说,先mark掉,随便感谢一下楼上
Eleven 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zxl200406 的回复:]
大哥。能给一点源码吗?小弟。谢谢了
[/Quote]
http://download.csdn.net/source/1916582
zxl200406 2010-06-22
  • 打赏
  • 举报
回复
大哥。能给一点源码吗?小弟。谢谢了
xfill 2010-06-22
  • 打赏
  • 举报
回复
心跳机制。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧