1。用udp,每次发包是否有限制,如果有限制的话,大小超过限制会出现什么情况。
2。用CSocket类,使用UDP,每次发包是否有限制。如果有限制的话,大小超过限制会出现什么情况。
有人试过大概一个包8k左右吧,超过就数据丢失。
你提交给IP层的数据包如果过大,ip层会进行分割,在接受端对同一个ip包进行重组,如果该包的某个分片丢失会导致整个包丢失.
根据udp数据包的格式定义,一个udp数据包的数据部分大小为64KB,但是由于各个系统的实现机制不同,实际发送的最大数据部分从32767-65535B不等。另外正如楼上所说,udp数据报的数据部分过大,则会在ip层会进行分割,这是必然的。
另外,楼主的问题不是很明确,所谓的限制到底是什么限制呢?是指超过一定大小就会丢包,还是指udp 和CSocket能装多少数据呢?
简单的说,“就没你这么问的”,呵呵
建议在512字节一包。
很多机器的实现是UDP包太大时把超过限制部分截断,于是你只能收到带消息头第一片。
建议采用动态MTU发现机制,先用小包建立通讯,再用大包从1572开始测试,直到能通讯的最大值。
简单的话就用1024,我用1024字节在很多网络上都测试通过。
大的包在IP层都会分包,在以太网IP包为1500字节限制,其中还包含20字节IP头和8字节UDP头,
所以单次发送的数据最好小于1472字节,考虑到传输过程中还受中间设备MTU的限制,
数据可能还进行分片,使用UDP的话单帧有效数据长度以小于等于1K为宜,我目前采用512字节,
效果很好.当然这个大小还得根据实际网络状况调整.