Во-первых, вы должны использовать java.nio для получения неблокирующего ввода-вывода.Предполагая, что вы не можете по какой-то причине ...
Вы можете легко заставить свой сервер обрабатывать данные от нескольких клиентов, используя DatagramSocket и рабочую очередь, такую как java.util.concurrent.ThreadPoolExecutor.
Идея состоит в том, что у вас есть один поток-получатель, читающий сокет, и каждая дейтаграмма принимается, упаковывается в объект «ReceivedDatagram» и помещается в рабочую очередь.Рабочая очередь имеет пул потоков, чьи потоки отключают и обрабатывают каждый пакет;если пакет требует ответа, поток отправляет ответ (блокировку) перед блокировкой, чтобы удалить из очереди другую ReceivedDatagram.
Для асинхронной отправки данных вы просто помещаете в рабочую очередь объект «SendDatagram», представляющий отправляемый DatagramPacket.
Обратите внимание, что вы будете использовать Datagram.receive (DatagramPacket) иDatagram.send (DatagramPacket).