Я изучаю протоколы NAT и STUN, но я не понял их, поэтому я попытался реализовать STUN в Java.
Допустим, у меня есть 2 компьютера, которые подключены к Интернету двумя соответствующимиустройства NAT с полным конусом, и я пытаюсь реализовать протокол STUN в Java, и я просто реализую часть, когда 2 узла знают внешний IP и порт друг друга, и одно из них (назовем этого участника "клиент")пытается отправить сообщение другому (и этот узел является "сервером").И я сделал что-то вроде этого:
На сервере я открыл сокет с помощью:
ServerSocket sv = new ServerSocket(0);
Затем я получаю IP-адрес серверапо этому сайту http://www.whatismyip.com, и получить порт, который открывается:
System.out.println(sv.getLocalPort());
На клиенте я отправляю сообщение на сервер по:
Socket sk = new Socket(serverIP, serverPort);
PrintWriter pw = new PrintWriter(sk.getOutputStream(), true);
pw.print("Hello there");
pw.close();
sk.close();
Но сервер не может ничего получить, поэтому у меня есть несколько вопросов:
Я думаю, что внешний порт сервера я получилВышеуказанный способ не является внешним портом, который будет использоваться другим узлом для отправки сообщения на сервер, так как правильно получить его в Java?
Способ, которым я это сделал, -правильный способ реализовать часть STUN, когда 2 пира знают внешний ip и порт друг друга после обмена с сервером STUN?если это не так, каков правильный путь?
Надеюсь, вы все объясните мне, спасибо всем!