问题提出背景:
我想实现文件的等比例传输,就是以每次多少节发送就以多少字节接收。10K以下发送接收都没有问题,超过10K的话,发送正常,但接收端在处理第一个包的时候出现一个奇怪的现象:第一次接收大部分内容,剩下的会在第二次中接收,这两次接收到的恰好是发送的第一个分包内容。更奇怪的是后面的分包发送接收又正常了!个人猜测:
第一次发送的数据在没有完全写入缓冲区前就调用了Receive接收,所以数据不全。而在刚接收完之后没有写入的数据进来了(发送端的Send并没有再次调用前),Receive再次响应将第一个分包剩下内容接收完毕。而至于后面的分包发送接收正常大概也跟时间差有关系。所以我想到通过判断Socket缓冲区中含有的字节数来决定是否接收,这样就可以保证等比例接收了。不知道能否实现,请高人指点!

解决方案 »

  1.   

    感谢TRUE的回复
    这思路我有想过,以字节流传输的话判断处理还好办。
    如果我要对文件数据进行打包[文件包序列号,文件包长度,文件包内容]传输的话好像不好处理,能给点提示不?
      

  2.   

    用While()循环来接收就可以了,判断是否接收完毕,接受完毕后返回
    while(1)
    {
       int nRev = Receive(buff,1024,0);
       if(nRev <0)
       {
          return;
       }
       ...
    }
      

  3.   

    你的意思是用UDP发包出现掉包了?
      

  4.   

    那你就参照RTP的协议来做,这些有包的序列号、长度你都可以增加或者是自定义也可以呀。
      

  5.   


    Socket没这功能,想变通的方法吧,就算每次发送不超过10K也有可能接收时分在两个接收包里的,
    按楼上的方法做吧