• 5042阅读
  • 2回复

[提问]Qt UDP如何测试出接收端哪一个端口能接收到UDP数据 [复制链接]

上一主题 下一主题
离线liangwenkuai
 

只看楼主 倒序阅读 楼主  发表于: 2014-02-19

请教大家个问题,一台机器向另一台机器发送UDP数据,但是发送端的端口号不知道,接收端如何检测哪一个端口是正确的端口?

原先我想在一个线程中,挨个把所有的端口都是一下。每个端口都绑定一下,绑定完以后,如果connect中的接受数据槽函数执行了,则就是这个端口能接受到数据,但是绑定第一个端口以后,线程就exec了,也就是类似于阻塞了,这样的话就不能判断了。


void CSocketThread::Recv(){
        while(m_pUdpSocket->hasPendingDatagrams())        {
                j = 1;                QByteArray datagram;
                datagram.resize(m_pUdpSocket->pendingDatagramSize());                m_pUdpSocket->readDatagram(datagram.data(),datagram.size());
                for (int i = 0;i < datagram.size();++i)                {
                        printf("%c",datagram.at(i));                }
                printf("\n");        }
}

void CSocketThread::run(){
        int realPort = 0;

        for(int i = 8999;i<65536;++i)        {
                m_pUdpSocket = new QUdpSocket();                bool b = m_pUdpSocket->bind(QHostAddress::Any, i);
                b = connect(m_pUdpSocket,SIGNAL(readyRead()),this,SLOT(Recv()), Qt::DirectConnection);                this->exec();
                if(j == 1)                {
                        realPort = i;                        break;
                }                m_pUdpSocket->close();
                delete m_pUdpSocket;                m_pUdpSocket = NULL;
        }        std::cout<<realPort;
}
离线zxwmail

只看该作者 1楼 发表于: 2014-02-19
端口号可以任意设置,除非是指定范围,不然不好寻找
离线退避九舍

只看该作者 2楼 发表于: 2014-02-19
用第三方库?
linux:libcap
windows:winpcap
快速回复
限100 字节
 
上一个 下一个