udp偶发数据发送不出去怎么回事
发布网友
发布时间:2023-01-06 11:23
我来回答
共2个回答
热心网友
时间:2023-10-18 05:28
tcp/ip
解决c++udp组播通信由于多网口造成无法发送数据包的问题
赖东东_
原创
关注
1点赞·1182人阅读
一、分析
什么叫做多网口?
使用ifconfig命令查看接口信息,如果只有eth0,说明你只有一个接口,那么udp无法发送数据包就不是因为多网口的问题了,那你就要去找其他原因
如果除了eth0还有eth1等接口时,就说明你的设备是多网口的
怎么判断是因为多个网口造成无法发送数据包?
1.首先,确定其他客户端能发送数据包到组播
通过打印数据和抓包就可以确定
2.本端能确定发送成功数据,但是通过组播地址抓包却无法抓到
通过在 发送数据函数接口内 打印发送的数据发现数据成功打印
在设备端(一般为开发板)检查网络状态,输出指令netstat -napu
可以看到 本地地址 local adress的ip地址为0.0.0.0
因为存在多个网口,每个网口都有它的ip地址和路由,所以当你查看你的设备网络状态的时候,就会发现你的地址是0.0.0.0
这个0.0.0.0地址是本地所有ip地址的一种表示地址。
所以,出现 确定发送了数据,无法抓包,网络状态显示ip为0.0.0.0,基本可以确定为是因为多网口的原因造成了数据包无法到达,因为一般的代码而言,都是固定一个从一个ip地址去到组播地址。而多网口的时候,路由会自动帮你选个最佳ip地址去往组播地址,但这个最佳的ip地址和你代码中设定的本地地址不一定一样,故你无法抓包,但却实是发送了数据
二、解决办法
根据以上总结,你大概就有了思路,既然我无法确定默认路由给的是哪条路去往组播地址,那我只要把所有的本地地址都发送一遍,总有一个被默认路由选中的路径去往组播地址
以下是让数据在所有本地地址都发送的一个例子,大家可以根据实际情况,只要向着上面的思路去写代码就可以解决这个问题
/
热心网友
时间:2023-10-18 05:28
解决:把虚拟网卡禁用 然后 再次启用。
发送正常。