问题描述
- C++ UDP Socket发送速率
- 我写了一个UDP发送数据的程序,每个包设置为1024B,如果不控制发送,一直循环
sendto,接收端就会丢包,如果一直sendto一次就Sleep(1),发送速度又太慢了,
网络发送速率才65KB/s,求大神有没有什么好的解决办法?
解决方案
/***********
服务端程序
************/
#include <Winsock2.h>
#include <stdio.h>
void main(){
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1 1 );
......
答案就在这里:C++Socket(UDP)
解决方案二:
发送的包较大,超过接受者缓存导致丢包:包超过mtu size数倍,几个大的udp包可能会超过接收者的缓冲,导致丢包。这种情况可以设置socket接收缓冲。以前遇到过这种问题,把接收缓冲设置成64K试试。
int nRecvBuf=64*1024;//设置为64K
setsockopt(sSOL_SOCKETSO_RCVBUF(const char*)&nRecvBufsizeof(int));
具体设置代码可以参考下面链接:
http://blog.sina.com.cn/s/blog_a459dcf5010153mp.html
另外,发送速度太快确实不行,你可以用usleep或者nanosleep设置更短的延迟
解决方案三:
http://www.educity.cn/wenda/509114.html
解决方案四:
发送端可以,发送五次左右,再Sleep
时间: 2024-12-19 09:30:35