[英]Java UDP client/server over internet does not work
我正在尝试实现来回发送消息的UDP客户端和服务器。
我的服务器在端口6060的本地IP .215上设置,而我的客户端在端口6061的本地IP .101上设置。两个端口都已在路由器(UDP)上转发。 我使用一些在线工具测试了端口,并确认端口已打开。
服务器通过侦听开始,这意味着客户端将发送第一条消息。 当客户端将其消息发送到端口6060上的本地IP .215时,通信将按预期进行。但是,当客户端使用相同的端口将其消息发送到Internet IP时,服务器将不会收到任何消息。 我不理解为什么。
下面是我给客户的代码:
public static void main(String args[]) throws Exception {
DatagramSocket clientSocket = null;
clientSocket = new DatagramSocket(null);
clientSocket.bind(new InetSocketAddress("192.168.1.101", 6061));
InetAddress serverIPAddress = InetAddress.getByName("my.internet.ip");
int serverPort = 6060;
byte[] sendData = new byte[504];
byte[] receiveData = new byte[504];
while (true) {
String sentence = "A" + Double.toString(Math.random()) + "A";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
}
}
下面是我的服务器代码:
public static void main(String[] args) throws IOException {
DatagramSocket serverSocket = new DatagramSocket(null);
InetSocketAddress serverAddress = new InetSocketAddress("192.168.1.215", 6060);
serverSocket.bind(serverAddress);
byte[] receiveData = new byte[504];
byte[] sendData = new byte[504];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
我删除了不必要的代码,例如控制台打印等,以使其更具可读性。
有什么想法为什么它不起作用,即通过Internet IP发送消息?
您的路由器不使用NAT反射,此功能是路由器允许从本地网络内部(通过内部使用端口转发规则)通过公用IP地址访问服务的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.