qudp socket信号不触发_QT下udpsocket一段时间接收不到数据的问题
最近在做一个项目 采用UDPSOCKET进行数据的传输,发现在一段时间后,UDP接收不到数据了,找了很久的资料 才发现解决该问题的方法,估计不是最好的。代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
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()<
}
}
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重启即可。
在我的项目中,我之前断开连接是使用的disconnect来断开信号与槽函数之间的连接,但是这样有一个问题就是,不论第一次连接成功与否,第二次都连接不上,即使发送端在发送数据,也接收不到。但是参考这篇文章改用了socket->close();之后发现就可以了。
虽然问题已经解决,但是我还是不太懂我之前的做法为什么不可以,因为虽然我是用disconnect断开与槽函数的连接,但是每次使用的时候都是创建一个新的套接字,然后重新连接槽函数,所以不明白为什么这样第二次就连接不上了。作为一个小白,非常希望有懂的大神指点一下,万分感谢!
qudp socket信号不触发_QT下udpsocket一段时间接收不到数据的问题相关推荐
- Windows10睡眠模式下过一段时间自动关机解决方法
现象 Windows10睡眠模式下过一段时间自动关机 解决方法 此电脑->右键选择[属性] 在打开的界面中,选择[设备管理器]->选择[系统设备]->选择[Intel(R) Mana ...
- Linux下添加虚拟串口,接收和发送数据
之前写的那虚拟串口有点问题,只能读取,不能接收.今天再来改一下.将python的内容改为如下: 先新建一个文档,内容如下 #! /usr/bin/env python#coding=utf-8impo ...
- 取消Halcon连接相机在外触发模式下的超时时间
取消Halcon连接相机在外触发模式下的超时时间 HALCON为大量的图像采集设备提供了接口,包括GenlCam,GigE和IIDC 1394,且支持众多品牌的相机.在日常的测试中,经常会利用halc ...
- linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题
Linux下高并发socket最大连接数所受的限制问题1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对 ...
- 最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算
最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算_u011852612的博客-CSDN博客
- java socket windows linux,socket在windows下和linux下的区别
windows到Linux代码移植遇到的问题 1.一些常用函数的移植http://www.vckbase.com/document/viewdoc/?id=1586 2.网络------转载& ...
- 【Paper】2022_切换拓扑下动态事件触发多智能体系统固定时间一致性
孙梦薇, 任璐, 刘剑, 孙长银. 切换拓扑下动态事件触发多智能体系统固定时间一致性. 自动化学报, 2022, 48(4): 1−11 doi: 10.16383/j.aas.c211123 文章目 ...
- linux socket ip层配置,Linux下Socket通信(TCP实现)
近期在做的项目中,涉及到了进程间数据传输,系统的原本实现是通过管道,但是原有的实现中两个进程是在同一台机器,而且两个进程的关系为父子关系,而我们要做的是将其中一个进程移植到服务器上,因此两个进程要分开 ...
- Esp8266 进阶之路21 【高级篇】浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- Android开发之实现每隔一段时间触发定时器android定时器
老套路看图: 每隔20秒重新触发 实际上实现也很简单我们可以通过android原生自带的定时器完成,说下思路: 1.首先实现android定时器开启触发 2.在定时器结束的方法中再次触发开启定时器即可 ...
最新文章
- 让我去健身的不是漂亮小姐姐,居然是贝叶斯统计!
- python的pptx文档_通过python-pptx模块操作ppt文件
- cocos2d笔记——CCNode与CCAction
- java resources目录 编码_关于Java项目读取resources资源文件路径
- C#中通过代码控制IIS服务重启
- 子程序与中断程序的异同_西门子200samrt高速计数器指令向导及程序
- zedgraph显示最小刻度_关于ZedGraph几个难点
- .NET调用新浪微博开放平台接口的代码示例
- 秦九韶算法介绍及MATLAB实现
- python趋势图_python绘制趋势图的示例
- 【目标提取】计算机视觉中如何利用颜色和形状提取目标?
- vue-cli3使用webpack-spritesmith配置雪碧图
- Java窗体实现飞机躲子弹游戏
- 怎样将excel中图表的横纵坐标互换。(亲测)
- mysql用户权限管理:查看用户权限、授予用户权限、收回用户权限
- 土著刷题微信小程序迭代新增更多的实用功能,试题查重、导出、笔记~~~
- 如何给windows系统安装新字体?
- java线程池的作用
- 浏览器的主页被恶意篡改并被锁定不能修改怎么办,用火绒一招解决?
- openresty 页面静态化及多级缓存