Допустим, у меня два компьютера.
Они знают публичные и частные IP-адреса друг друга через ice4j
.
Один клиент прослушивает, а другой отправляет некоторую строку.
Я бы хотел, чтобы это произошло через перфорирование отверстий UPD:
Let A be the client requesting the connection
Let B be the client that is responding to the request
Let S be the ice4j STUN server that they contact to initiate the connection
--
A sends a connection request to S
S responds with B IP and port info, and sends A IP and port info to B
A sends a UDP packet to B, which B router firewall drops but it still
punches a hole in A own firewall where B can connect
B sends a UDP packet to A, that both punches a hole in their own firewall,
and reaches A through the hole that they punched in their own firewall
A and B can now communicate through their established connection without
the help of S
Может ли кто-нибудь опубликовать псевдо-примеры того, как делать пробивку отверстий через симметричный NAT? Предполагая, что будет сервер S, который поможет угадать номера портов и установить соединение между клиентом A и B.
Было бы неплохо, если бы вы учитывали двойной NAT.
Примечание:
Вы можете использовать STUN для обнаружения IP и порта, но вам нужно написать свой собственный код, который отправит IP-порт на ваш сервер с помощью технологии keepalive
.
Как только один клиент идентифицирует другого с помощью уникального идентификатора на сервере, ему будет предоставлена другая информация о IP-адресе клиента в отверстие UDP, чтобы перенести данные, необходимые для отправки и получения.
Небольшое обновление:
Есть библиотека, которая появляется на горизонте, чтобы проверить Java:
https://github.com/htwg/UCE#readme