DeepsMann Ответов: 2

Прослушивание нескольких портов на одном сервере


Привет,

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

это означает, что я должен держать все 4 порта в режиме прослушивания одновременно.

Теперь я могу устанавливать связь между клиентом и сервером на одном порту, отправлять и получать данные.

Я искал и нашел что-то похожее здесь (но это для Java, и мне нужно что-то похожее для .Net) http://stackoverflow.com/questions/5079172/java-server-multiple-ports[^]

пожалуйста, помогите, как я могу создать такое соединение сокета.

Мне нужно это сделать :

1. Старт сервера;
2. прослушивание входящих соединений на нескольких портах;
3. Определите порт, к которому вы подключаетесь;
один. Если порт 1, запустить какой-нить слушает клиента и выводить сообщение типа Х
б. Если 2 порта, запустить какой-нить слушает клиента и тип вывода сообщения г

заранее спасибо.

2 Ответов

Рейтинг:
9

Member 13684712

Привет....
Я пытаюсь создать программу, в которой сервер может прослушивать один порт, и при наступлении какого-то события он перестанет прослушивать этот порт и начнет прослушивать другой порт, а после прослушивания другого порта он должен возобновить предыдущий порт.
Пожалуйста, помогите мне с этим.

Рейтинг:
2

BobJanova

Это почти наверняка неправильный подход. Номера портов-это ценный ресурс, и если у вас есть контроль над протоколом, то гораздо лучше прослушивать только один, хорошо известный порт и иметь первое сообщение в протоколе коммутационным сообщением, которое выбирает дальнейшие детали будущих сообщений (в данном случае "я тип x/y/etc"). Это сообщение может быть таким же простым, как клиент, отправляющий байт (или короткий, или int, если вы думаете о более чем 256 переключаемых типах) в качестве первой вещи в потоке.

Тип соединения должен быть свойством каждого объекта модели соединения, и после того, как вы его разработали, не имеет значения, был ли он основан на порту или сообщении (или другой информации, например, IP-адрес клиента, параметры конфигурации и т. д.). Поэтому вы не должны использовать что-то столь редкое, как номера портов, для выполнения черной задачи переключения.

Если (и только если) вы не контролируете протокол, вы должны сделать это просто, запустив несколько серверных сокетов и используя асинхронный сокет ввода-вывода (например, вызов BeginAccept) на каждом из них. Но я подчеркиваю, что если у вас есть контроль над архитектурой и протоколом, как это звучит из вашего описания, вы должны принимать все сообщения через один и тот же порт и обрабатывать все остальное из сообщений, отправляемых между клиентом и сервером.