QT UDP套接字返回空数据报
QT UDP Socket Returning Empty Datagrams
让我开始说,这比QT问题更可能是UDP配置问题。
我正在使用UBUNTU计算机上使用UDP重播到Windows PC上的PCAP文件。当我通过Wireshark检查UDP数据时,我可以看到每个数据包中的所有关联数据。但是,当我使用QT程序时,我可以通过适当的长度进行数据包,但是数据包内没有数据,只有0。
i具有Windows PC的IP地址,设置为与Ubuntu Source PC以及配置的适当端口在同一子网上。
我本质上正在使用QT多播接收器示例,此处:http://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html
有什么想法吗?
编辑:
我对不包括适当的代码表示歉意。
void Receiver::processPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
statusLabel->setText(tr("Received datagram: "%1"")
.arg(datagram.data()));
}
}
datagram.data()字节数组简单地填充了零,无论数据包实际包含什么。
想法?
您的代码方便地忽略了readDatagram
返回的收到的数据报的大小;这是可能错误的根源。通过使用receiveDatagram
改用:
void Receiver::processPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
auto datagram = udpSocket->receiveDatagram();
statusLabel->setText(tr("Received datagram: "%1"")
.arg(QString::fromLatin1(datagram.data().toHex())));
}
}
现在,数据报的内容已编码为十六进制,很容易确切地告诉其中和它的时间是多长时间。通常,这是一个非常糟糕的主意将不动动的数据报道作为参数传递给字符串输出方法,因为这使得任何UTF-8解码器可能可以利用。使用toHex()
保护自己免受此侵害。由于data()
此处不是char * data()
,而是QByteArray data()
,因此显示器将准确显示收到的长度。
相关文章:
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 连接UDP套接字,但仍然接收来自其他源的数据报
- 为什么 sys 套接字 recv 函数不填充数据但返回字节长度?
- UDP 客户端(接收器)未按预期接收数据报
- QT UDP套接字返回空数据报
- 在Wireshark中看到的数据报,未由QT UDP套接字收到
- QUdpSocket:无法接收数据报
- Udp 在 QT 定时器信号中写入数据报
- 是否可以在数据报套接字中同时用于发送和接收
- 通过Boost Asio获取UDP数据报长度
- QUdpsocket在处理前一个数据报时丢失数据报
- C++中的字节翻转数据只返回零
- UDP 数据报套接字编程,服务器在 JAVA 中,客户端在 C++
- 如何修改数据报原始TCP/IP
- 数据报Unix套接字上的ECONNREFUSED
- Qt数据报结构结果:混合序列
- UDP数据报计数
- 为什么从派生类访问基类的数据时会返回无意义的数据(我认为是指针数据)
- Boost.Asio数据报(UDP)套接字,既绑定又连接