QT下udpsocket一段时间接收不到数据的问题
来源:互联网 发布:凤凰直播软件下载 编辑:程序博客网 时间:2024/05/26 08:43
最近在做一个项目 采用UDPSOCKET进行数据的传输,发现在一段时间后,UDP接收不到数据了,找了很久的资料 才发现解决该问题的方法,估计不是最好的。代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
udpsocket=new QUdpSocket(this);
udpsocket->bind (1234,QUdpSocket::ShareAddress);
connect (udpsocket,&QUdpSocket::readyRead,this,&MainWindow::slotReadyReadDatagrams);
QTimer *timer=new QTimer(this);
connect (timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
timer->start (10000);
i=0;
}
void MainWindow::slotReadyReadDatagrams ()
{
while(udpsocket->hasPendingDatagrams ())
{
i++;
QByteArray datagram;
QHostAddress senderHostAddress;
datagram.resize (udpsocket->pendingDatagramSize ());
udpsocket->readDatagram (datagram.data (),datagram.size (),&senderHostAddress);
qDebug()<<"接收次数"<<i<<"接收命令"<<senderHostAddress.toString ()<<QString(datagram.toHex ());
}
}
void MainWindow::timerUpDate ()
{
if(udpsocket->bytesAvailable()!=0)
{
qDebug()<<"接收不到数据,重启";
udpsocket->close ();
udpsocket=new QUdpSocket(this);
udpsocket->bind (1234,QUdpSocket::ShareAddress);
connect (udpsocket,&QUdpSocket::readyRead,this,&MainWindow::slotReadyReadDatagrams);
}
}
若接收数据正常,udpsocket->bytesAvailable()的值将为0,接收不到数据则为非零值,这样就可用个定时器,是不是的检测下,若不为零,将SOCKET重启即可。
上面的代码已上传至http://download.csdn.net/detail/zhulichen/9626649 希望对大家有帮助,若是有人想到更好的解决方法,希望可以交流下。
2 0
- QT下udpsocket一段时间接收不到数据的问题
- erlang异步接收不到数据的问题
- Qt 使用UDPSocket遇到的丢包问题
- linux下使用udpsocket时遇到的问题
- [备忘]windows 下 mailslot 接收不到的问题
- qt TCP接收数据遇到的问题
- QT中UDPSocket丢包问题
- QT中UDPSocket丢包问题(续)
- AFNetworking发送成功,接收不到数据问题
- Qt 的udpSocket通信及相关
- UdpSocket如何实现通过代理接收多包数据
- 关于UDP向本机端口发送数据报但是接收不到数据的问题
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题
- struts2 数据传输问题---“POST方式提交数据量过大,在后台接收不到数据”问题的解决
- GCDAsyncSocket 接收不到数据
- 解决接收不到组播包的问题
- Qt中realAll() 接收数据不完整的问题
- servlet接收不到JSP传来的数据servlet接收不到JSP传来的数据
- PAT甲 1007. Maximum Subsequence Sum (25)
- 我的小一步,争取是人类的一大步
- jQuery基础
- sql 多表连接与子查询
- Docker基础教程——数据管理
- QT下udpsocket一段时间接收不到数据的问题
- 5年时间,研究177位百万富翁,发现这13条规律
- VS2010:出现devenv.sln解决方案保存对话框
- 为什么越没本事的人,?自尊心越强(深度好文) (1)
- PAT甲 1008. Elevator (20)
- MVC
- Java 反射 getClass()
- loadrunner的同步点/集合点
- ListView开源框架