Прежде всего, когда клиент передает свой адрес, это звучит довольно ужасно, по крайней мере для меня. Вещание означает, что оно будет работать только в том случае, если сервер находится в локальной подсети, а также загрязнять сеть большим количеством ненужного трафика.
Я бы попросил клиента найти сервер через DNS Service Discovery ( DNS-SD ). Преимущество этого заключается в том, что вы можете использовать многоадресный DNS , пока ваш сервер находится в локальной подсети, и переходить на глобальный сервер, используя обычный администрируемый DNS, без каких-либо изменений в клиенте.
Во-вторых, сервер должен не выделять поток каждому клиенту. Хотя эту модель можно заставить работать до некоторой степени, у нее довольно много накладных расходов и она очень плохо масштабируется.
Наконец, к (как я думаю, был) ваш первоначальный вопрос: вместо разных портов для каждого клиента у меня будет один порт для всех клиентов. Каждый запрос от клиента будет содержать достаточно информации, чтобы сервер мог выполнить любой запрос, который он содержит. Сервер просто прослушивает свой единственный порт и обслуживает каждый запрос по мере его поступления. Вы можете выделить для этого более одного потока, но это должен быть общий пул потоков, т. Е. Количество задействованных потоков является просто вопросом конфигурации, не имеющим логического значения для общего проекта (т. Е. Идентичности конкретного Поток не имеет значения - если вы переходите на более крупный сервер с 8-кратным количеством человеко-ядер, добавление большего количества потоков - это просто вопрос настройки большего количества потоков, а не изменения общего дизайна).