UDP 支持发送的最大包限制为65507字节,再大只能自行分包、重组或者换TCP
c++ udp send big packet
UDP datagram 大小限制 65,535 bytes
测试socket udp 单次传输数据上限(sendto()函数data不能超过65507字节。udp头占8字节,ip头占20字节,加起来正好65535字节)
void udp_test()
{
char *p = new char[65507];
string strsend;
strsend.assign(p, 65507);
int ret = udp_send("127.0.0.1", 8888, strsend);
printf("udp_send ret=%d\n", ret);
delete[] p;
}
udp_send ip=127.0.0.1,port=8888
send buffer size = 163840
sendto ret = 65507
udp_send ret=65507
void udp_test()
{
char *p = new char[65508];
string strsend;
strsend.assign(p, 65508);
int ret = udp_send("127.0.0.1", 8888, strsend);
printf("udp_send ret=%d\n", ret);
delete[] p;
}
udp_send ip=127.0.0.1,port=8888
send buffer size = 163840
sendto ret = -1
udp_send ret=-1
UDP仅提供数据报作为IP数据包的数据部分,IP数据包具有16位长度的字段,因此将数据限制为2 ^ 16字节(包括标题),或UDP数据部分的65507字节(假设没有ipv4选项) ,除了用UDP处理更大的数据包外,除了将它们分成几个数据包并自行处理重组等之外,没有其他方法。
UDP规范在UDP报头中为您提供16位的数据包大小,这意味着您一次发送的字节数不能超过65k。您必须将数据拆分为多个数据包。使用TCP代替UDP将使事情变得更加简单,因为可以确保完整性和接收顺序。
本文链接地址:https://const.net.cn/273.html