Множественное подключение Java к серверу в динамических портах

Мне нужен UDP-сервер, который позволит мне получать/отправлять информацию от/к клиентам, которые динамически откроют сокет со свободным портом (поэтому он будет отличаться от устройства и устройства< /сильный>). Клиент будет отправлять и получать через один и тот же порт, поэтому сервер должен иметь возможность общаться с ним.

как я могу настроить сервер так, чтобы он оставался открытым в каждом порту? если бы у меня было 250 тысяч пользователей, как бы я мог справиться с ними без проблем с хвостами и предотвращения занятия порта другим клиентом?

Я думал открыть каждый порт с разными сокетами в разных потоках, но не знаю, правильно ли это.


person user4789408    schedule 22.04.2015    source источник


Ответы (1)


UDP-сервер может слушать и быть открытым только на одном порту. Все клиенты могут отправлять данные на этот порт. Сервер должен будет обрабатывать все данные и при необходимости отвечать узлу, отправившему свои данные. Это должно произойти, даже если несколько клиентов хотят отправить данные на сервер. В контексте UDP один клиент не будет занимать порт сервера (если только приложение не написано плохо).

person Prabhu    schedule 22.04.2015
comment
Так что с UDP у меня никогда не будет занят порт? С 10 клиентом или 500 000 все равно? Я думаю, что использование только 1 порта может быть опасным, в частности, если мне нужно позаботиться о DDOS, у меня будет только 1 порт для всего. Кроме того, если каждый клиент отправляет на один и тот же порт, как сервер может реагировать на случайный порт, сгенерированный клиентом для получения? - person user4789408; 22.04.2015
comment
Сколько клиентов может обрабатывать сервер, зависит от дизайна приложения. Дело в том, что протокол UDP не говорит, что только один клиент может подключиться к открытому порту. Если DDOS может произойти в порту, он также может быть создан во многих портах, которые вы открываете. Сервер знает одноранговый IP-адрес и порт из данных, которые он получает. - person Prabhu; 22.04.2015
comment
Если мой клиент уже занял порт, который я выбрал для приема на своем сервере, может ли клиент отправлять данные на этот порт? - person user4789408; 22.04.2015
comment
Клиенты не занимают порт. Они не привязаны к этому порту. Нет установленного соединения, как в TCP. Они отправляют данные, предназначенные для порта сервера. Он может достичь или потеряться. Попробуйте с простым сервером и клиентами. Иметь один экземпляр сервера, работающий на порту. Многие экземпляры клиентской программы работают для отправки/получения данных с сервера. - person Prabhu; 22.04.2015
comment
Я имею в виду, может быть, это вызывает проблемы, потому что моему приложению нужно отправить порт, который занят другим приложением, для получения. - person user4789408; 22.04.2015