Qt 通过UDP广播搜索设备(模拟设备回应并修改IP实现过程)
UDP搜索设备UDP广播搜索设备用途通过广播发送搜索指令设备收到后进行响应同一个端口绑定多个IP为什么有多个IP,呐,就这么多程序效果程序介绍设备端客户端UDP广播搜索设备用途在不知晓设备IP的情况下,快速找到设备IP并进行修改!(常规操作)!通过广播发送搜索指令设备收到后进行响应回复内容:包含设备的IP、MAC地址等信息(根据需要进行实现)同一个端口绑定多个IP同一个端口绑定多个IPforeac
·
UDP广播搜索设备
用途
在不知晓设备IP的情况下,快速找到设备IP并进行修改!(常规操作)!
通过广播发送搜索指令
设备收到后进行响应
回复内容:包含设备的IP、MAC地址等信息(根据需要进行实现)
同一个端口绑定多个IP
同一个端口绑定多个IP
foreach (QHostAddress address, getIpAddrs()) {
QUdpSocket *socket = new QUdpSocket(this);
bool bindOK = socket->bind(address, LOCAL_PORT, QUdpSocket::ShareAddress);
connect(socket,SIGNAL(readyRead()),this,SLOT(processPengingDatagram()));
qDebug()<<QString("socket bind port:%1 to addr:%2 %3.").arg(LOCAL_PORT).arg(address.toString().toLocal8Bit().data()).arg(bindOK?"ok":"fail");
udpSocketList->append(socket);
}
//获取IP
QList<QHostAddress> getIpAddrs()
{
QList<QHostAddress> listaddr;
//使用allAddresses命令获得所有的ip地址
QList<QHostAddress> list=QNetworkInterface::allAddresses();
QString str = "";
foreach (QHostAddress address,list)
{
if(address.protocol()==QAbstractSocket::IPv4Protocol && address != QHostAddress::LocalHost)
{
listaddr.append(address);
}
}
return listaddr;
}
为什么有多个IP,呐,就这么多
原因:因为计算机可能存在多个网卡,如果你的设备连接的是其中一个,如果不全部绑定,那么设备就有可能收不到我们的搜索报文
PS:如果不全部绑定,在虚拟机中尝试的时候能收到,返回返回的数据Client收不到。
程序效果
设备端是通过模拟程序来实现的
左边的为Client,右边的为模拟的设备端
程序介绍
设备端
通过模拟设备来实现设备端的数据响应,设备端绑定固定端口,接收广播
收到广播后判定收到的是否为约定的内容,如果是则处理,否则不处理
响应时也是向对方的端口发送一条广播,广播内容包含自己的IP、MAC地址等信息
客户端收到后进行处理
DEMO下载
客户端
客户端通过主动发送广播数据,搜索局域网内的设备
搜索到后进行处理
代码就不一一在这里贴了,直接将整个工程都上传了,需要的下载参考!
源码下载
更多推荐
所有评论(0)