0
我試圖實現UDP客戶端和來回發送消息的服務器。互聯網上的Java UDP客戶端/服務器不起作用
我的服務器在端口6060上的本地IP上設置,而我的客戶端在端口6061上的本地IP上設置爲101.兩個端口都在路由器(UDP)上轉發。我使用一些在線工具測試了這些端口,並確認這些端口是開放的。
服務器通過偵聽啓動,意味着客戶端將發送第一條消息。當客戶端通過端口6060將消息發送到本地IP.215時,通信按預期工作。但是,當它發送到互聯網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);
}
}
我例如去除不必要的代碼控制檯打印等,使其更具可讀性。
任何想法,爲什麼它不起作用,即通過互聯網IP發送消息?
你說得對。我的路由器不允許你用它來描述NAT。它有一個DNS功能,所以我爲我的服務器創建了一個主機名。它現在有效!謝謝。 –