我正在建立一个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。
根据google image search,数据包缺少预告片位...虽然我不是网络专家,但这完全是猜测。
Windows 7 x64,VS2010,QT 4.8-latest x64