Qt UDP发现网关实现

来源:互联网 发布:js编码转换为utf8 编辑:程序博客网 时间:2024/05/26 20:19

在局域网的开发过程中,有时候会用到通过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);
中实现的。

0 0
原创粉丝点击