服务器端(s):
完成端口客户(c):
异步Socketc发出数据
for (i=0;i<10;i++)
send("aaa")由于c发出数据很快.所以服务器方收数据时会把几个send数据并成了一个收了过来.出现了数据粘连.请问在服务器方有什么办法可以得到c端的每个单的send来的数据呢?
比如上面的c 方的10次send,到s方也可以有10次通知数据到并且数据要完整呢?前题是不可以改到c方的程序.请高手指教

解决方案 »

  1.   

    流也可以啊,如
    char *buf=new char[3];
    for(int i=0;i<10;i++)
      {
       recv(sockServer,buf,3,0);
       此时就只从发送队列中拿出一次发送的3个aaa了
      }
      

  2.   

    不要用UDP,它一次发送一个数据包,接受方不能撤包,
    用TCP可以,我就经常从客户端发一个字符和一串控制命令过去,接受端可以区分
      

  3.   

    经刚试用了一下 flmttm() 的方法在完成端口里是可行的.
    可还有其它方法吗?
    这个方法如果在网络数据到达特别快特多时.因为我在收了一个指定长后要处理.这时是要用时间的.
    有可能这个时间内到达数据过多.以至大于buffer产生数据的丢失.
      

  4.   

    有人说用CreateEvent与WaitForSingleObject可以准确得到每个send来的数据.
    可我并不了解这个.所以...........还请高手指教.用CreateEvent与WaitForSingleObject是否可行.怎样实现呢?还有其它方法吗?
      

  5.   

    发送端用TCP_NODELAY,并且头加发送数(datasize)
    接收端还datasize接收
      

  6.   

    Sander能细说一下吗。不太明白你的意思 。
      

  7.   

    TCP_NODELAY是禁止Nagle算法,就是不优化,每次发几多就送几多,不会等到一定数量再发。
    至于加头,就是方便收多大的包。