网络UDP广播包发不出去或接收不到问题
更新于2020年1月03日
发生背景
使用电脑作为client端,局域网内发送广播。手机作为server端,监听65532端口。
症状
单播情况下(指定Server端Ip地址),手机可以监听到数据;
广播情况下(Ip=255.255.255.255),手机监听不到数据。
代码
public class UDPClient {
public static void main(String[] args) {
try {
//A.向服务器端发送数据
// 1.定义服务器的地址(指定IP发送)、端口号、数据
Optional<Inet4Address> ip4Address = (Optional<Inet4Address>) NetUtil.getLocalIp4Address();
byte[] data = ("我是客户端,我的Ip为" + ip4Address.get().getHostAddress()).getBytes();
// 2.创建数据报,包含发送的数据信息
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName(UDP_HOST), UDP_PORT);
// 3.创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket();
// 4.向服务器端发送数据报
socket.send(packet);
//B.接收客户端的响应
// 1.创建数据报,用于接收服务器端响应的数据
socket.setSoTimeout(1000 * 60);
long startTime = System.currentTimeMillis();
while (startTime - System.currentTimeMillis() < 60 * 1000) {
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
// 2.接收服务器响应的数据
socket.receive(packet2);
// 3.读取数据
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说:" + reply);
}
// 4.关闭资源
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
原因
找了好一会,没找到原因。网络上随便搜索了下,试试了居然真的是。
在公司最近项目中,有关设备搜索采用UDP广播方式搜索,出现的情况是,部分机器能正常接收到广播包,部分机器接收不到广播包,部分机器发送不了广播包情况,经过N天的查询,结果发现惊人的秘密:虚拟机网卡导致广播包发送不出去或接收不到问题!!!以上结果仅供各位大神参考!
补充一下,这文章发布几年了,一直有人问怎么设置,我也表示无语了,告诉是网卡问题,禁用虚拟机网卡不就OK了。。。
————————————————
版权声明:本文为CSDN博主「贝壳里的沙」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lixiang987654321/article/details/41697533/
禁用虚拟网卡的操作方式
我的电脑上安装了vmware,所以我需要禁用它的网卡
1.在计算机(我的电脑或此电脑)上点击鼠标右键,选择【管理】,打开计算机管理控制器。
2.在计算机管理中,打开【设备管理器】,在右侧可以看到本计算机的所有硬件设备信息,点开【网络适配器】,就能看到本机所有的网卡了。
3.在不需要使用的网卡上点击鼠标右键,点击【禁用】就把对应的网卡停用了。需要时再点击鼠标右键【启用】就可以了。
更新于2020年2月16日
我今天想使用一下VMVare
隐隐约约记得,曾经我是为了什么事情干了什么事情。可是我啥也想不起来,搜索半天,突然记起,我好像写了博客。我就过来看,卧槽,天了噜,幸亏幸亏。
果然好记性不如烂笔头,为自己点赞。