Ok, comencemos desde el principio. No sé qué está haciendo y cómo, pero cuando lo hace con la red, debe probar el patrón REACTOR .
Básicamente, el reactor es una forma de evitar el uso de hilos o deferente donde una tarea roscada está más desacoplada por el núcleo.
El centro del reactor es la función de selección : registra sus fuentes de eventos y le pide a la selección que regrese cuando algo le ocurra a una de esas fuentes .
Cuando algo se agrega, el bucle principal del reactor simplemente encuentra qué fue lo que afectó a qué fuente reacciona creando un evento y distribuye este evento a los objetos interesados en ese tipo de eventos.
No soy un Java Guru, pero sé que puedes configurar el socket (incluso los UDP) y puedes configurarlos como no bloqueantes. Junto con esto, sé que hay una clase llamada Selector en un paquete llamado NIO. Esas cosas coinciden en definir una instalación de E / S multiplexada y sin bloqueo
Todo lo que necesita es simplemente configurar dos canales UDP: uno para escuchar el servidor y el otro para hablar del servidor; registre el que escucha en el reactor e integre el paso de reacción del reactor en su circuito principal.
Tenga en cuenta que este tipo de enfoque le permite conectarse simultáneamente con diferentes canales para que pueda considerar desarrollar un juego entre pares (sin cuello de botella en el servidor y diseño distribuido ... ¡suena bien!)
PD
Tenga en cuenta que si está utilizando algún tipo de interfaz gráfica de usuario, probablemente ya esté utilizando un Reactor ...