1。用udp,每次发包是否有限制,如果有限制的话,大小超过限制会出现什么情况。
2。用CSocket类,使用UDP,每次发包是否有限制。如果有限制的话,大小超过限制会出现什么情况。

解决方案 »

  1.   

    是UDP,用WINSOCK API发的吗?
    超过就数据丢失---是指整个包丢失,还是丢失超过的部分数据?
      

  2.   

    你提交给IP层的数据包如果过大,ip层会进行分割,在接受端对同一个ip包进行重组,如果该包的某个分片丢失会导致整个包丢失.
      

  3.   

    根据udp数据包的格式定义,一个udp数据包的数据部分大小为64KB(因为长度只有两个字节来表示),但是由于各个系统(包括各个版本的unix,windows)的实现机制不同,实际发送的最大数据部分从32767-65535B不等。另外正如楼上所说,udp数据报的数据部分过大,则会在ip层会进行分割,这是必然的。另外,楼主的问题不是很明确,所谓的限制到底是什么限制呢?是指超过一定大小就会丢包,还是指udp 和CSocket能装多少数据呢?
    简单的说,“就没你这么问的”,呵呵
      

  4.   


    1.第一个问题指的是用winsock api,使用udp协议,用sendto()发包,包大小的限制,
    超过该限制必然丢包
    2。第二个问题,因为CSocket封装了api,同样使用udp协议,用Send()发包,
    包大小的限制是多少。超过该限制必然丢包或者Send()失败
      

  5.   

    很多机器的实现是UDP包太大时把超过限制部分截断,于是你只能收到带消息头第一片。建议采用动态MTU发现机制,先用小包建立通讯,再用大包从1572开始测试,直到能通讯的最大值。
    简单的话就用1024,我用1024字节在很多网络上都测试通过。
      

  6.   

    大的包在IP层都会分包,在以太网IP包为1500字节限制,其中还包含20字节IP头和8字节UDP头,
    所以单次发送的数据最好小于1472字节,考虑到传输过程中还受中间设备MTU的限制,
    数据可能还进行分片,使用UDP的话单帧有效数据长度以小于等于1K为宜,我目前采用512字节,
    效果很好.当然这个大小还得根据实际网络状况调整.
      

  7.   

    上面几位说的都对,在绝大多数情况下(包括公网传输)1024字节是不会被分片的,也就保证了发包的成功率。具体各种网络结构所允许的MTU的值可以看Comer的《用tcp/ip 实现网际互连》卷一,里面有比较全的统计。
    在X.25以及其他低速网络已经退出主流应用的情况下,基本上1024就是极限了。
      

  8.   

    再问个问题,会不会因为接收方的原因使得UDP包丢失?
    比如说:接收方接收数据过于频繁,会因为数据未及时处理而丢失?