Пример пробивки дырок в Java UDP - подключение через брандмауэр

Допустим, у меня есть два компьютера.

Они знают друг друга публичные и частные 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's IP and port info, and sends A's IP and port info to B

A sends a UDP packet to B, which B's router firewall drops but it still
punches a hole in A's 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

Ответы на вопрос(4)

Ваш ответ на вопрос