最近在做一个项目  采用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一段时间接收不到数据的问题相关推荐

  1. Windows10睡眠模式下过一段时间自动关机解决方法

    现象 Windows10睡眠模式下过一段时间自动关机 解决方法 此电脑->右键选择[属性] 在打开的界面中,选择[设备管理器]->选择[系统设备]->选择[Intel(R) Mana ...

  2. Linux下添加虚拟串口,接收和发送数据

    之前写的那虚拟串口有点问题,只能读取,不能接收.今天再来改一下.将python的内容改为如下: 先新建一个文档,内容如下 #! /usr/bin/env python#coding=utf-8impo ...

  3. 取消Halcon连接相机在外触发模式下的超时时间

    取消Halcon连接相机在外触发模式下的超时时间 HALCON为大量的图像采集设备提供了接口,包括GenlCam,GigE和IIDC 1394,且支持众多品牌的相机.在日常的测试中,经常会利用halc ...

  4. linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题

    Linux下高并发socket最大连接数所受的限制问题1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对 ...

  5. 最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算

    最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算_u011852612的博客-CSDN博客

  6. java socket windows linux,socket在windows下和linux下的区别

    windows到Linux代码移植遇到的问题 1.一些常用函数的移植http://www.vckbase.com/document/viewdoc/?id=1586 2.网络------转载& ...

  7. 【Paper】2022_切换拓扑下动态事件触发多智能体系统固定时间一致性

    孙梦薇, 任璐, 刘剑, 孙长银. 切换拓扑下动态事件触发多智能体系统固定时间一致性. 自动化学报, 2022, 48(4): 1−11 doi: 10.16383/j.aas.c211123 文章目 ...

  8. linux socket ip层配置,Linux下Socket通信(TCP实现)

    近期在做的项目中,涉及到了进程间数据传输,系统的原本实现是通过管道,但是原有的实现中两个进程是在同一台机器,而且两个进程的关系为父子关系,而我们要做的是将其中一个进程移植到服务器上,因此两个进程要分开 ...

  9. Esp8266 进阶之路21 【高级篇】浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  10. Android开发之实现每隔一段时间触发定时器android定时器

    老套路看图: 每隔20秒重新触发 实际上实现也很简单我们可以通过android原生自带的定时器完成,说下思路: 1.首先实现android定时器开启触发 2.在定时器结束的方法中再次触发开启定时器即可 ...

最新文章

  1. 让我去健身的不是漂亮小姐姐,居然是贝叶斯统计!
  2. python的pptx文档_通过python-pptx模块操作ppt文件
  3. cocos2d笔记——CCNode与CCAction
  4. java resources目录 编码_关于Java项目读取resources资源文件路径
  5. C#中通过代码控制IIS服务重启
  6. 子程序与中断程序的异同_西门子200samrt高速计数器指令向导及程序
  7. zedgraph显示最小刻度_关于ZedGraph几个难点
  8. .NET调用新浪微博开放平台接口的代码示例
  9. 秦九韶算法介绍及MATLAB实现
  10. python趋势图_python绘制趋势图的示例
  11. 【目标提取】计算机视觉中如何利用颜色和形状提取目标?
  12. vue-cli3使用webpack-spritesmith配置雪碧图
  13. Java窗体实现飞机躲子弹游戏
  14. 怎样将excel中图表的横纵坐标互换。(亲测)
  15. mysql用户权限管理:查看用户权限、授予用户权限、收回用户权限
  16. 土著刷题微信小程序迭代新增更多的实用功能,试题查重、导出、笔记~~~
  17. 如何给windows系统安装新字体?
  18. java线程池的作用
  19. 浏览器的主页被恶意篡改并被锁定不能修改怎么办,用火绒一招解决?
  20. openresty 页面静态化及多级缓存

热门文章

  1. NoSQL数据库——Hbase
  2. 尚硅谷2022 jenkins教程笔记
  3. 大数据Hadoop生态圈
  4. 北京的雾霾是大风吹走的吗
  5. kepware OPC UA通讯问题
  6. Springboot+Thymeleaf《药品管理系统》
  7. 非参数统计之局部多项式回归
  8. Ubuntu图形化数据库连接工具
  9. Code-NFine:jqgrid 数据绑定
  10. linux脚本基础详解