gpt4 book ai didi

c++ - 在 Wireshark 中看到的数据报,Qt UDP 套接字未收到

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:46 26 4
gpt4 key购买 nike

我正在编写一个通过 UDP 套接字与 FPGA 通信的 Qt (5.6) 应用程序。数据包以 2 KHz 的速率流式传输到 PC(所有数据包大小相同,1272 字节)。 Wireshark 显示正在发送数据包,并且 UDP header 符合预期。问题是,我正在使用的 Qt UDP 套接字从未收到这些数据包。 readyRead 信号永远不会被调用。

这是一个代码片段:

UdpConnection::UdpConnection(QObject* parent)
{
fpgaConnection = QSharedPointer<QUdpSocket>(new QUdpSocket);

qDebug() << connect(fpgaConnection.data(), &QUdpSocket::readyRead, this, &UdpConnection::readyRead);

if (fpgaConnection->bind(QHostAddress("192.168.10.10"), 1920))
{
qDebug() << "Successfully Bound!";
}
else
{
qDebug() << "BINDING FAILURE";
}

fpgaConnection->connectToHost(QHostAddress("192.168.10.200"), 1919);

sendArpRequest();
}

void UdpConnection::readyRead()
{
while (fpgaConnection->hasPendingDatagrams())
{
QByteArray buffer;
buffer.resize(fpgaConnection->pendingDatagramSize());

QHostAddress sender;
quint16 senderPort;

fpgaConnection->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
qDebug() << "Message from:" << sender;
qDebug() << "Message port:" << senderPort;
qDebug() << buffer;
}
}
  • UdpConnection 没有运行在与主线程不同的线程上。应该吗?
  • 我绑定(bind)成功,并且我认为“connectToHost”正在工作,因为我能够向远程主机发送消息。
  • 该应用程序已添加到防火墙异常(exception)列表(再次,ARP 握手证明它们能够通信)。
  • 该接口(interface)是 FPGA 和 PC 之间的直接以太网连接。

为什么 Wireshark 可以看到这些消息,而我的程序却看不到?

更新#1Wireshark 将 2KHz 数据包作为 LLC 数据包。以太网 header 显示正确的目标(我的 MAC 地址)、源地址(在 FPGA 中硬编码)和长度。 IP header 的源 IP 为 192.168.10.200,目标 IP 为 192.168.10.10,UDP header 的源端口为 1920,目标端口为 1919。

更新#2Wireshark 日志:paste.ee/p/98c1H如您所见,数据包以 2KHz 的频率从 FPGA 重复发送。 ARP传输和回复可以在第5、10和11个数据包中找到。

更新#3传入数据包的 IP 数据包具有未设置为 0x0000 的正确校验和。

最佳答案

我不太熟悉 Qt,但对于 BSD 套接字 API,我通常使用 bind 来设置我的接收端口,但不使用 connect 进行 UDP 连接,尤其是在使用不同的端口时,例如 1919 和 1920对于套接字 API,使用 sendto() 发送具有目标 IP/端口的数据包。

所以,尝试注释掉connectToHost,发送时直接使用writeDatagram

关于c++ - 在 Wireshark 中看到的数据报,Qt UDP 套接字未收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41005455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com