是这样的
我服务器。保存了很多客户端连接的socket。我一方面。要判断客户端是否存活。(加了定时器。判断)又得。操作客户端。发出一些操作指令
我判断是否存活。我发了垃圾数据过去。
send(socket,"d",1,0);
msg是一个结构体变量
我客户端。主线程中while(1)中一直去Recv(socket,(char*)&msg,sizeof(msg),0);这个主线程会收到服务器发出的垃圾数据。。我如何来才好啊。我不想服务器判断存活的垃圾数据。来影响 我主线程中正常的接收啊
我服务器。保存了很多客户端连接的socket。我一方面。要判断客户端是否存活。(加了定时器。判断)又得。操作客户端。发出一些操作指令
我判断是否存活。我发了垃圾数据过去。
send(socket,"d",1,0);
msg是一个结构体变量
我客户端。主线程中while(1)中一直去Recv(socket,(char*)&msg,sizeof(msg),0);这个主线程会收到服务器发出的垃圾数据。。我如何来才好啊。我不想服务器判断存活的垃圾数据。来影响 我主线程中正常的接收啊
服务器发一个检侧包(这个包你自己定义即可)
然后客户端如果接到就回复
如果一段时间以内服务器没有得到回复就认为对方掉线
这个没有什么源码不源码的
就是SendTo和Recieve了
比如:
struct PackHeader
{
int m_type;//数据类型,是心跳包还是什么
size_t m_len;//数据段的长度,这样你还可以一并解决粘包额问题
};
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
{
}
}