linux端java代码接收不到udp数据包

我在网上找了syslog的java实现代码,然后自己根据实际情况改动了一下接收端的代码。在windows系统本地测试的时候一切正常,但是发布到linux服务器后,发现怎么都接收不到数据。后来单独测试udp通信代码,发现也是收不到数据包。
以下是我测试用的服务端代码
DatagramSocket ds=new DatagramSocket(30002); //接收端口号的消息
ds.setBroadcast(true);
while(true){
    byte[] bys=new byte[1024];
    DatagramPacket dp=new DatagramPacket(bys,bys.length);//建立信息包
    ds.receive(dp);//将socket的信息接收到dp里
    System.out.println("接收到数据为:"+new String(dp.getData(),0,dp.getLength()));
}
以下是我测试用的客服端代码
DatagramSocket ds = new DatagramSocket(); //建立通讯socket
ds.setBroadcast(true);

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//读取键盘输入流
String line;
while ((line = br.readLine()) != null) {
    if ("886".equals(line))
        break;
    byte[] bys = line.getBytes();
    //建立数据包,声明长度,接收端主机,端口号
    DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("127.0.0.1"), 30002);
    ds.send(dp);//发送数据
}

ds.close();
两个端都运行在windows上时,客户端发消息,服务端可以正常接收到。但是把服务端放到linux系统的机器上时,就收不到数据包了
我尝试过以下方式

1.将30002/udp 加入防火墙,无用,接收不到数据
2.systemctl stop firewalld关掉防火墙,无用,接收不到数据
3.把windows上运行的服务端通过linux上的frp中转,可以收到。但是我想直接在linux上运行服务端,而不是还要再开一个windows用来运行服务端

我想实现使用java编写的udp服务端程序(如上),在linux系统上运行时,可以接收到来自其他客户端发来的udp的数据包,请问是需要对系统进行什么设置吗?还是说java的代码有需要调整的地方的哦?