Я пишу пару UDP-клиент-сервер для сетевого класса и столкнулся с проблемой. Это довольно необычное сетевое назначение, поэтому сначала немного о себе:
Цель состоит в том, чтобы создать сервер для реализации push-уведомлений. Ключевым моментом здесь является то, что сервер должен связаться с клиентом по тому адресу, который он видел в последний раз, а также прослушать контрольные пакеты клиента. Поэтому у меня на клиенте запущен поток, периодически отправляющий UDP-пакеты на сервер, который регистрирует их происхождение, когда ему нужно отправить ответ. Этот метод также переходит через NAT, так как отправка обновляет трансляцию адреса.
Итак, вот моя дилемма: если я не ошибаюсь, NAT сопоставляет свой собственный адрес и сгенерированный номер порта с комбинацией адреса клиента порт . Поэтому, чтобы успешно пройти через NAT, мне нужно переместить все мои пакеты через один порт на клиентском компьютере. Поток обновления просто должен будет некоторое время прослушивать, выдавать пакет обновления и возвращаться к прослушиванию.
Тогда вот где это становится волосатым. Если исходный поток, который хочет выполнить какое-либо действие, хочет порт, он должен разбудить извещатель, который блокирует ожидание ответа.
Как я могу осуществить это на Java?
P.S .: Если выяснится, что NAT разрешил бы связь через другой порт, то все будет здорово.