imx6ull UDP组播发送数据wireshark抓到数据包ip地址不是目标板ip地址

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

imx6ull UDP组播发送数据wireshark抓到数据包ip地址不是目标板ip地址

128 Views
blackberrytcl
Contributor I

pc机跟Imx6uLL目标板通过网线直连,pc机使用wireshark抓包软件抓取网口数据。Imx6uLL目标板通过UDP组播方式发送数据。PC机ip地址192.168.94.124。子网掩网255.255.255.0默认网关192.168.94.1。

blackberrytcl_2-1701397263839.png

 

目标板ip地址192.168.94.195。子网掩网255.255.255.0默认网关192.168.94.1。

blackberrytcl_1-1701396527140.png

设置ip文件配置如下

[root@buildroot ~]$cat /etc/network/interfaces
# interface file auto-generated by buildroot

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.94.195
broadcast 192.168.94.255
netmask 255.255.255.0
gateway 192.168.94.1

实际使用wireshark抓到的数据包源地址不是目标板设置的源地址ip,而是一个随机ip地址。目的地址是程序发送的目的地址具体如下图

blackberrytcl_3-1701397804748.png

 

使用qt进行通信,核心代码如下:
QUdpSocket *m_qudpSocket;
QString strIP = "230.2.15.1";//UDP协议 组播IP:230.2.15.1 端口:8501 127.0.0.1
quint16 nport = 8501;
m_qudpSocket = new QUdpSocket();

//https://zhuanlan.zhihu.com/p/651930693
//socket QAbstractSocket::MulticastTtlOption值为1,MulticastTtlOption是
//组播的数据的生存期,数据报没跨1个路由就会减1.表示多播数据报只能在同一路由下的局域网内传播
m_qudpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption,1);

//加入组播之前,必须先绑定端口,端口为多播组统一的一个端口。
if(m_qudpSocket->bind(QHostAddress::AnyIPv4, nport, QUdpSocket::ShareAddress)){
m_qudpSocket->joinMulticastGroup(QHostAddress(strIP));//加入组播
}

发送数据:

int a = m_qudpSocket->writeDatagram("111111111222222222", QHostAddress(strIP), nport);

 

 

0 Kudos
0 Replies