这里简单说明一下,UDP通信分为三种,分别为单播,组播和广播。这三种方式都需要在Qt中添加网络模块并包含头文件

QT       += network
#include <QUdpSocket>

单播就是发送消息到指定的IP+端口

组播就是发送消息的指定的IP组+端口

广播就是发送整个网络。

具体代码网上应该有很多了,这里就的部分代码分享,其他可以自行百度。

 

其实代码还是很简单的,第一步,建立UDPsocket

udpServer = new QUdpSocket(this);     //接收数据
    udpServer->bind(QUdpSocket::ShareAddress);   //第一个参数为端口号,第二个参数为表示允许其他地址链接广播
    connect(udpServer,&QUdpSocket::readyRead,this,&MainWindow::slot_Read_Udpsocket_Date);

剩下的就是发送广播数据

int xx = udpServer->writeDatagram((char*)searchDev,4,QHostAddress::Broadcast,1901);  

这样就可以在接收函数中接收数据了。

今天遇到的问题就是硬件设备无法检测是否收到数据,智能通过在PC端通过抓包软件来看是否将数据广播出去

Qt 使用UDP广播来寻找当前网段内在线设备_QT的

从这里看,我的数据是发送完毕了,但是没有收到数据的返回,排除了一下午是不是这两行代码写的有问题,一直得不到设备返回的数据。也不能确定设备是都收到数据。

经过排查,TM是文档中给的端口号有问题,厂家提供的软件的端口号和文档中提供的不是一个随后吧端口改成厂家提供软件中的端口解决问题。

Qt 使用UDP广播来寻找当前网段内在线设备_UDP_02

所以,哈哈哈,文档还是要及时更新好,不然就是误人子弟啊,害我白忙乎了好几天。

以上就是今天的内容了