我写的TCP传文件的程序,就是和孙鑫的那种方式一样的。unsigned char *buffer;
发送的buffer只能在1024,加到2048的时候,前面几次是可以的,但是到后面的时候就发送失败了。没有固定的位置。
1024就不会丢包。发送间隔 Sleep(200);
休息200的时候OK,时间换50或100就会失败。
同样是前面几次是OK的,然后后面的就失败了。这个问题好郁闷。大家发送的时候都把大小设多大啊?
我要是发个1M的文件,那我头发不都等白了啊!
那要是来个100MB的文件,那就。。

解决方案 »

  1.   

    - -!八成是你程序写的有问题.
    你用的什么模型?还有TCP最大的传输单元是固定的.
    你想发送几M的数据,最好自己拆包组包~
      

  2.   

    我分析应该是客户端没有来得及收, 以至于你发送太快把buffer挤满了, 因此就发送失败了。 这个你可以通过GetLastError看看
      

  3.   

    tcp的buffer默认buffer是8.5k左右, 你可以用这个极限值去试试。
      

  4.   

    发送文件竟然sleep(200),不慢才怪,TCP发送文件,不需要sleep(),严格按照发多少接多少的原则。定义好协议,先发文件长度,然后发文件内容,不要多发,也不要少发。另外,孙鑫那个程序是有bug的,不要完全按照他那个来。
      

  5.   

    我用的是阻塞模型,
    孙鑫的有BUG,那用什么样的啊?
      

  6.   


    sleep(200)也很正常, 关键是为什么发送失败, 原因我都给你说了。
      

  7.   

    发送的慢与Sleep有关可以不用Sleep试一下
      

  8.   

    去掉sleep,然后做个检测,如果发送失败且是WSAEWOULDBLOCK错误的话,无限
    循环发送.
      

  9.   

    既然你是sleep再发,就不可能快,网络都是"能发就发",你去sleep,就说明你不会检测什么时候可以发送
    至于buffer size,我估计你 也没明白tcp是不关心buffer size的,你一次send后,有没有检查到底发送了多少字节?是不是一次发送就以为1024字节全出去了?知道send返回值和recv返回值啥意思么?