使用QUdpSocket从特定地址接收数据



我正在尝试通过UDP进行客户端到客户端的通信。我正在使用QUdpSocket来完成此操作。

我的第一个客户端的IP是127.0.0.2,第二个客户端的IP是127.0.0.3。

在我的第一个客户端中,我想发送数据,所以我这样做:

socket = new QUdpSocket(this);
socket->bind(QHostAddress("127.0.0.2"), (quint16)actual_port);
...
Data = QByteArray::fromRawData((const char *)stockR.data, crypt_packet.size_struct); 
socket->writeDatagram(Data, QHostAddress("127.0.0.3"), (quint16)port_other);

在我的第二个客户中,我有这个:

socket = new QUdpSocket(this);
socket->bind(QHostAddress("127.0.0.3"), (quint16)port_second);

...
QByteArray buffer;
buffer.resize(socket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
socket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);

但是我无法从readDatagram()接收我的数据,我不知道为什么。

我在双方都做每一项功能,这意味着我在两个客户端上都读写(就是打VoIP电话(。

有人知道我的错误是什么吗?

readDatagram方法是非阻塞的:只有当hasPendingDatagrams()为true时,才能有效地调用它。这个标志又通过运行Qt事件循环来控制。

你有两个选择:

  • 使用socket->waitForReadyRead()在设定的时间(30s(内阻止您的程序
  • 或者将上面的代码放在连接到readyRead信号的插槽处理程序中,让事件循环自然运行,使应用程序对其他输入保持响应

相关内容

  • 没有找到相关文章

最新更新