最近在某个项目中,发现了一个低版本Qt的bug,导致组播无法正常使用,经过一番排查,终于找到了原因,特此记录。
环境
- Qt:5.7.0 mingw32
- 操作系统:windows 11
现象
在Qt5.7.0版本中,使用组播发送数据时,发现数据无法接收,经过长时间的排查,发现是Qt的bug,具体现象如下:
- 在Qt5.7.0版本中,使用组播发送数据时,发现数据无法接收。
- 使用串口调试工具,发现发送的数据包没有问题(无论何种情况都可以)。
- 使用wireshark抓包,发现发送的数据包没有问题。
- 使用Qt自带的组播收发例子,本机测试发现可以正常接收数据,但是当收发处于两台电脑时不能接收。
排查步骤
-
使用调试工具
- 使用地址 0.0.0.0: port 不能接收到数据
- 使用地址 192.168.1.100: port 可以接收到数据
- 使用地址 239.255.255.255: port 不能接收到数据
-
测试自带的组播收发例子
- 本机测试可以正常接收数据
- 两台电脑测试不能接收数据
尝试解决
经过一顿搜索,加上长时间的摸索(本机的虚拟网卡太多),长时间折腾后发现只有一个网卡的时候可以正常。必须祭出终极大杀器 socket sdk 如果还不行都不知道该怎么办了,结果测试竟然可行
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
void sendData(SOCKET sock)
{
struct sockaddr_in dest_addr; // 目标地址结构体
// 设置目标地址
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET; //


5707

被折叠的 条评论
为什么被折叠?



