我正在设置一个 QUdpSocket 广播器。当我在 Wireshark 中查看输出时,它说我的数据包格式错误。检查数据包,似乎它们不是用以太网预告片发出的。我需要自己发出这个,还是你看到另一个问题?我下面的代码略微浓缩。请注意,如果通过交叉电缆连接,我的接收设备(微控制器)确实会看到并响应数据包(如在 wireshark 上看到的)。我想确保我没有格式错误的帧,因此我可以在允许 UDP 流量的交换网络上使用它。
谢谢
const quint16 s_packetHeader = 0x5A5A;
const quint16 s_sendReadBackRegisters = 0x0203;
m_udpSocketWriter= new QUdpSocket(this);
QByteArray datagram;
QDataStream ds(&datagram, QIODevice::WriteOnly);
ds.setVersion(QDataStream::Qt_4_8);
ds << s_packetHeader << s_sendReadBackRegisters;
m_udpSocketWriter->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 5000);
和wireshark的输出
"1243","886.645245000","172.27.1.117","255.255.255.255","UDP","46","Source port: 58411 Destination port: 5000[Malformed Packet]"
0000 ff ff ff ff ff ff d4 3d 7e 31 e0 27 08 00 45 00 .......=~1.'..E.
0010 00 20 38 6b 00 00 80 11 54 d2 ac 1b 01 75 ff ff . 8k....T....u..
0020 ff ff e4 2b 13 88 00 0c fe 34 5a 5a 02 03 ...+.....4ZZ..
注意最后四个字节对应我发送的数据,5A 5A 02 03。
根据谷歌图片搜索,数据包缺少预告片......虽然我不是网络专家,这完全是猜测。
Windows 7 x64、VS2010、QT 4.8-latest x64