我有网络一个程序,采用非阻塞编程,事件方式
如果客户端在send一份数据后不执行任何操作再继续send数据,在服务器端就会把客户端发送的两份数据当作成一份处理.
如:
client:
send("abc",3);
send("def",3);server:
recv() == abcdef
size=6如果在服务器端把两个包分开呢?

解决方案 »

  1.   

    Sleep(100);
    搞定!嘿嘿!我也不知道好的办法,帮你UP!
      

  2.   

    将数据包的长度组合到数据包里,如第1~2为放置长度,这样接手端就能根据长度自己取到合适的内容,长度可以用memcpy(buffer, &nLen, sizeof(short))来拷贝。实际上,你的Send也是有问题的,如果连续发送,或发送太大的数据包,可能丢失数据,建议参考一下CSocket代码,或采用多线程。
      

  3.   

    谢谢各位了,帖子再放一会儿,中午结贴.我想在发送时作一下判断,如果上次send到这次send的时间不路50ms,就休息一会再发.不知道行不行,请给点意见class CTcpIpNet
    {
    public:
        DWORD m_dwLastSendTickCount;
        SendData()
        {
            while(GetTickCount()-m_dwLastSendTickCount>50);
            send();
            m_dwLastSendTickCount = GetTickCount();
        }
    }
      

  4.   

    http://tangentsoft.net/wskfaq/index.html
    上面有你想要的.仔细找找吧.
    不要使用SLEEP这种东东.网络上的时序问题并不是靠SLEEP可以解决的