我在网上找了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用来运行服务端