树莓派使用java接收不到udp组播数据,但是可以发送

gaogaogao 2024-03-1179 次点击
使用树莓派64位的系统,jdk17,接收不到udp数据,netstat -nulp显示端口监听在udp6上,禁用udp6之后还是收不到,但是写的发送能从另一台电脑上收到数据.接收的代码如下:
```
public static void main(String[] args) {‌‌
try {‌‌
if(!loadFile(args)){‌‌
System.out.println("加载配置文件异常!"+ Arrays.toString(args));
return;
}

final MulticastSocket orgSocket = getOrgSocket();

new Thread(()->{‌‌
try {‌‌
DatagramPacket inpack = new DatagramPacket(new byte[1500], 1500);

while (true) {‌‌
try {‌‌
//数据接收
orgSocket.receive(inpack);
System.out.println(Arrays.toString(inpack.getData()));

} catch (SocketTimeoutException e) {‌‌
//如果是接收超时了 那么跳过这次循环 不需要继续向下走
//超时是正常的 所以不需要打印报错 日志提醒即可
System.out.println("数据接收等待超时:"+configInfo());
continue;
}

}
// System.out.println("===============接收已经关闭成功===============");
} catch (Exception e) {‌‌
e.printStackTrace();
} finally {‌‌
if(orgSocket!=null){‌‌
orgSocket.close();
}
}
}).start();
} catch (IOException e) {‌‌
e.printStackTrace();
}


}


/**
* 获取接收组播socket
* @return
* @throws IOException
*/
private static MulticastSocket getOrgSocket() throws IOException {‌‌
SocketAddress bindaddr = new InetSocketAddress(localip, orgport);
MulticastSocket sock = new MulticastSocket(bindaddr);
// MulticastSocket sock = new MulticastSocket(relayConfig.getOrgport());
sock.setInterface(InetAddress.getByName(localip));
InetAddress bcAddr = InetAddress.getByName(orgip);
System.out.println("初始化接收组播信息:" + configInfo());
System.out.println();
// 创建socket并加入组播地址
// sock.joinGroup(bcAddr);
sock.joinGroup(new InetSocketAddress(bcAddr,orgport), NetworkInterface.getByName(localip));
//sock.setLoopbackMode(false); // 必须是false才能开启广播功能!!
sock.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false);

//设置每次接收的超时时间
//如果不设置 接收不到数据会一直阻塞 如果先关闭了广播 就无法停止接收会一直监听 消耗系统资源
//设置超时时间后 如果超过此时间(毫秒) 未接收到数据 会跳过continue循环
sock.setSoTimeout(3000);

return sock;
}

private static String configInfo() {‌‌
return "localip:"+localip+",orgip:"+orgip+",orgport:"+orgport+",tarip"+tarip+",tarport:"+tarport;
}
```
收藏 ♥ 感谢
Spoony 小组长 2024-03-12 
这个看不明白,没接触过

登录注册 后可回复。

这里由以下店铺的技术人员在此免费提供能力范围内的技术支持。

NXEZ 创客商店(淘宝)

排障问题发帖注意事项:
1、请尽可能将故障说明清晰,列明例如使用环境和做了哪些操作和配置等。
2、排障中已经做了哪些尝试,如果能在问题中进行描述将极大提高解决问题的效率。
3、对于需要自身完成知识积累才能解决的问题,请自行通过搜索引擎寻找资料学习。