Java 在Ubuntu 14.04上打开一个端口,用于与“DatagramSocket”客户端和服务器进行远程通信

Java 在Ubuntu 14.04上打开一个端口,用于与“DatagramSocket”客户端和服务器进行远程通信,java,ubuntu,serversocket,portforwarding,datagram,Java,Ubuntu,Serversocket,Portforwarding,Datagram,我有两台主机,一台是Ubuntu 14.04作为服务器,另一台是windows 10作为客户端 DatagramSocket socket = new DatagramSocket(); InetAddress destination = InetAddress.getByName("192.168.0.120"); DatagramPacket packet = new DatagramPacket(buffer,buffer.length,destination,50005); socket

我有两台主机,一台是Ubuntu 14.04作为服务器,另一台是windows 10作为客户端

DatagramSocket socket = new DatagramSocket();
InetAddress destination = InetAddress.getByName("192.168.0.120");
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,destination,50005);
socket.send(packet);
在服务器端:

DatagramSocket s = new DatagramSocket(50005);
DatagramPacket p = new DatagramPacket(receivedata,receivedata.length);
s.receive(p);
它们在专用网络下都可以正常工作,即服务器正在专用网络中侦听端口50005。但将专用地址替换为公用地址并访问服务器不起作用。这是因为端口“50005”已关闭


如何将“50005”转发到java服务器所在的Ubuntu桌面,并使其可以从internet上的任何位置访问?

似乎您忘记了在服务器端指定绑定IP。查看
DatagramSocket(int-port,InetAddress-laddr)
constructor。可能是。但它可以与私有地址配合使用。我需要的是在主机上打开50005端口,并通过路由器将数据包转发到主机,以便我可以与服务器远程通信。似乎您忘记了在服务器端指定绑定IP。看看DatagramSocket(int port,InetAddress laddr)构造函数。可能是。但它在专用地址上运行良好。我需要的是在主机上打开50005端口,并通过路由器将数据包转发到主机,以便我可以与服务器远程通信。