是这样的
我服务器。保存了很多客户端连接的socket。我一方面。要判断客户端是否存活。(加了定时器。判断)又得。操作客户端。发出一些操作指令 
我判断是否存活。我发了垃圾数据过去。
send(socket,"d",1,0);
msg是一个结构体变量 
我客户端。主线程中while(1)中一直去Recv(socket,(char*)&msg,sizeof(msg),0);这个主线程会收到服务器发出的垃圾数据。。我如何来才好啊。我不想服务器判断存活的垃圾数据。来影响 我主线程中正常的接收啊

解决方案 »

  1.   

    http://download.csdn.net/source/1916582
      

  2.   

    心跳检测就是一种机制
    服务器发一个检侧包(这个包你自己定义即可)
    然后客户端如果接到就回复
    如果一段时间以内服务器没有得到回复就认为对方掉线
    这个没有什么源码不源码的
    就是SendTo和Recieve了
      

  3.   

    你最好自定义一个简单的协议,在每条通信的消息里加入包头,里面的变量表示发来的是什么数据;
    比如:
    struct PackHeader
    {
    int m_type;//数据类型,是心跳包还是什么
    size_t m_len;//数据段的长度,这样你还可以一并解决粘包额问题
    };
      

  4.   

    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
    {
    }
    }