メッセージを前後に送信するUDPクライアントとサーバーを実装しようとしています。インターネット経由でJava UDPクライアント/サーバーが動作しない
私のサーバはポート6060のローカルIP .215に設定され、クライアントはポート6061のローカルIP .101に設定されます。両方のポートはルータ(UDP)に転送されています。いくつかのオンラインツールを使用してポートをテストし、ポートが開いていることを確認しました。
サーバーはリッスンによって開始します。つまり、クライアントは最初のメッセージを送信します。クライアントがメッセージをポート6060のローカルIP .215に送信すると、意図したとおりに通信が行われます。ただし、同じポートを使用してインターネットIPに送信すると、サーバーは何も受信しません。私はなぜなのか理解していない。私は、例えば、不要なコードを削除
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);
}
}
:以下
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());
}
}
は、サーバーのための私のコードです:以下
は、クライアントのために私のコードですそれをもっと読みやすくするためにコンソールに印刷します。
インターネットIPを介してメッセージを送信する理由は何ですか?
あなたはそうです。私のルーターはあなたがそれを記述する方法でNATを許可しません。 DNS機能があるので、自分のサーバーのホスト名を作成しました。それは今働きます!ありがとう。 –