Java Ejemplo de perforación de agujeros UDP: conexión a través del firewall

Digamos que tengo dos computadoras.

Conocen las IP públicas y privadas de cada uno a través deice4j.

Un cliente escucha y el otro envía alguna cadena.

Me gustaría ver que esto suceda a través de la perforación de agujeros 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
¿Podría alguien publicar pseudo ejemplos de cómo hacer perforaciones a través de NAT simétrica? Suponiendo que habrá un servidor S que ayudará a adivinar los números de puerto y establecer la conexión entre el cliente A y B.

Sería bueno si también representaras el doble NAT.

NOTA

Puede usar STUN para descubrir la IP y el Puerto, pero debe escribir su propio código que enviaría la IP: Puerto a su servidor a través dekeepalive técnica.

na vez que un cliente identifica al otro a través de una identificación única en el servidor, se le proporcionará la IP del cliente del otro: la información del puerto a UDP perforará los datos que necesita enviar y recibir.

Pequeña actualización:

Hay una biblioteca que está apareciendo en el horizonte para Java. Compruébalo:
https: //github.com/htwg/UCE#readm

Respuestas a la pregunta(8)

Su respuesta a la pregunta