博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QUdp不能很好支持大网络数据包情况
阅读量:5844 次
发布时间:2019-06-18

本文共 1435 字,大约阅读时间需要 4 分钟。

最近在用QT做应用程序开发,采用UDP通讯模式,部分代码如下:

QUdpSocket     *udpSocket;udpSocket = new QUdpSocket(this);  connect(udpSocket, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));    void UdpClient::readPendingDatagrams()     {         while (udpSocket->hasPendingDatagrams())          {             QByteArray datagram;             datagram.resize(udpSocket->pendingDatagramSize());             QHostAddress sender;             quint16 senderPort;             udpSocket->readDatagram(datagram.data(), datagram.size(),&sender, &senderPort);         }     }  复制代码

该代码在网络数据量不高时比如10kB/s能够正常工作,但是当软件系统网络数据包为30kB/s以及以上时,发现程序运行一段时间后直接报段错误,软件异常时的栈调用如下所示:

通过对对栈提示信息进行分析,发现问题可能出现在socket通讯部分,通过对程序进行走读,发现程序在进行读写操作时都进行了必要的加锁解锁操作。推测可能是因为QUDP本身的问题,即在某些应用场景下QUDP对大带宽的网络通讯不能很好支持。于是我采用C的socket相关模块对QUDP通讯相关模块进行重写,部分代码如下:

//创建socket对象     int sockfd=socket(AF_INET,SOCK_DGRAM,0);      //创建网络通信对象     struct sockaddr_in addr;     addr.sin_family =AF_INET;     addr.sin_port =htons(1333);     addr.sin_addr.s_addr=inet_addr("127.0.0.1");      //绑定socket对象与通信链接     int ret =bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));     if(0>ret)     {         printf("bind\n");         return -1;      }     struct sockaddr_in cli;     socklen_t len=sizeof(cli);      while(1)     {         char buf =0;         recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,&len);     }     close(sockfd);复制代码

完成后对软件进行压力测试,发现在大网络数据包情况下,软件系统能够正常运行。可见采用C的socket会比QUdpSocket健壮性好。

转载地址:http://vshcx.baihongyu.com/

你可能感兴趣的文章
C++关于字符串的处理
查看>>
问题账户需求分析
查看>>
java中回调函数以及关于包装类的Demo
查看>>
读书:为了那个美妙的咔哒声
查看>>
OllyDBG 入门系列教学--让你瞬间成为破解高手
查看>>
爬虫去重(只是讲了去重的策略,没有具体讲实现过程,反正就是云里雾里)...
查看>>
avcodec_open2()分析
查看>>
Jquery Form表单取值
查看>>
Team Name
查看>>
西门子_TDC_数据耦合小经验
查看>>
JAVA MAC 配置
查看>>
大话数据结构之四(串)
查看>>
加热炉简是新来的整个系统的板
查看>>
Mockito使用注意事项
查看>>
[LeetCode] Palindrome Linked List 回文链表
查看>>
UVA - 825Walking on the Safe Side(dp)
查看>>
评论:人才流失强力折射出现实畸形人才观
查看>>
虚拟运营商10月或大面积放号 哭穷背后仍有赢家
查看>>
UML中关联,组合与聚合等关系的辨析
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>