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下载
客户端
客户端通过主动发送广播数据,搜索局域网内的设备
搜索到后进行处理
代码就不一一在这里贴了,直接将整个工程都上传了,需要的下载参考!
源码下载