我做了一个程序,调用send一次性可以发送100k以上的数据,但recv时只能收到20k左右的数据。
网上有些资料介绍通过循环发送,有的是一次发送1k左右的数据,有的一次发送8k,还有32k的,有点迷惑。
所以请教大家send和recv数据最佳长度是多少,效率最高?

解决方案 »

  1.   

    TCP协议会自动拆分或者合并你send的数据,包的长度只会影响占用内存的多少,在程序不能及时接收数据时才需要考虑这个问题,一般情况下以程序处理方便为主。
      

  2.   

    TCP的话循环收,只要你send成功了,数据就是完整的。
      

  3.   

    TCP无需考虑包大小;UDP包大小最好不要超过1.5K字节(经验值,能有效适应互联网环境)
      

  4.   

    send数百k一般都是你不懂,检查方法不对,一次不可能发送这么多的TCP编程的一个重要因素就是循环发送和接收组抱
      

  5.   

    系统默认发送和接收缓冲区为8.5K,可以设置成32K。
    看样子,你发的东西比较大,所以需要分包,组包了。
    实际发送的时候,还要看网络情况,比如同样发10K,
    网络忙得时候还有可能超时呢~
    很多人都一次发1K,不大,也不算小,呵呵
      

  6.   

    UDP MCU 的值TCP 8192
      

  7.   

    最好以一个最小MTU来发送,这样在网络上传输时就不需要分包与组包,在网络条件不好的时候可以减少重传的字节数。
      

  8.   

    UDP MTU 的值 
    MTU 不同的网络接入是不一样的, 建议用 1400TCP 8192 
      

  9.   

    UDP我用1k,有个范围:75bit~1.5k;超过当特殊包处理,低于当碎片包,都影响成功率。
    TCP我用4k
      

  10.   

    TCP 建议32M
    根据我的实验,windows xp 32bit下有个问题send函数最多不能超过63M多一些,否则就会失败