请教大家个问题,一台机器向另一台机器发送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;
}