您的位置:首页 > 编程语言 > Qt开发

Qt UDP发现网关实现

2014-09-18 11:09 686 查看
在局域网的开发过程中,有时候会用到通过UDP广播去发现网段内的网段,可以采取这种方式:

_BroadcastSock = new QUdpSocket(this);
_BroadcastSock->bind(9090);
connect(_BroadcastSock,SIGNAL(readyRead()),this,SLOT(OnBroadcaseReceive()));
QByteArray cmd("GETIP");
cmd.push_back(0x0D);
cmd.push_back(0x0A);

if(_BroadcastSock->writeDatagram(cmd,cmd.length(),QHostAddress::Broadcast,9090) \
!=cmd.length())
{
QMessageBox::warning(this,tr("警告"),tr("网络错误"),0,0);
return;
}


绑定了端口后,当网段内其他IP在此端口发送数据,并且收到的时候,都会在OnBroadcaseReceive()槽函数中处理。

void smartclass::OnBroadcaseReceive()
{
QHostAddress addr;
quint16 port;
while (_BroadcastSock->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(_BroadcastSock->pendingDatagramSize());
_BroadcastSock->readDatagram(datagram.data(), datagram.size(),&addr, &port);

QString   ipStr(datagram);
BroadMsgHandle(addr,port,ipStr);

return;
}
}


在这里获取数据的 时候,同时把数据源的ip和端口都获取了。QHostAddressaddr;quint16port;

具体协议如何实现,楼主是在

BroadMsgHandle(addr,port,ipStr);
中实现的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp broadcast