u011316148
zyzz1994
采纳率0%
2016-05-19 14:38 阅读 4.5k

C++ UDP Socket发送速率

我写了一个UDP发送数据的程序,每个包设置为1024B,如果不控制发送,一直循环
sendto,接收端就会丢包,如果一直sendto一次就Sleep(1),发送速度又太慢了,
网络发送速率才65KB/s,求大神有没有什么好的解决办法?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • NK_test NK_test 2016-05-19 16:19

    发送的包较大,超过接受者缓存导致丢包:包超过mtu size数倍,几个大的udp包可能会超过接收者的缓冲,导致丢包。这种情况可以设置socket接收缓冲。以前遇到过这种问题,把接收缓冲设置成64K试试。
    int nRecvBuf=64*1024;//设置为64K
    setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
    具体设置代码可以参考下面链接:
    http://blog.sina.com.cn/s/blog_a459dcf5010153mp.html
    另外,发送速度太快确实不行,你可以用usleep或者nanosleep设置更短的延迟

    点赞 1 评论 复制链接分享
  • CSDNXIAOC Robot-C 2016-05-19 14:42

    /***********
    服务端程序
    ************/
    #include <Winsock2.h>
    #include <stdio.h>

    void main(){
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );
    

    ......
    答案就在这里:C++Socket(UDP)
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    点赞 评论 复制链接分享
  • devmiao devmiao 2016-05-19 15:51
    点赞 评论 复制链接分享
  • q610098308 恋恋西风 2016-05-20 01:13

    发送端可以,发送五次左右,再Sleep

    点赞 评论 复制链接分享

相关推荐