2016-08-30 5 views
2

Привет, поэтому у меня есть один простой вопрос, могу ли я запустить два tcp Socket-прослушивателя , но каждый из них прослушивает другой порт, как один сервер, но 2 порта для прослушивания? Потому что у меня есть дилемма с программированием tcp и при программировании сокетов, и это то, о чем я никогда не читал в сети.TCP/IP Socket Port Lisening

Благодаря это схема того, что я хочу сделать This is The Diagram of the Connection У нас есть один IP и два разных порта подключения

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

+0

Простой ответ: да :) На самом деле вы даже должны использовать разные порты для каждого слушателя, это то, как ваши услуги адресованы на ваш сервер – Sebastian

ответ

0

Возможно.

Цитирую @BuckCherry

..two клиенты могут подключаться к тому же порту сервера, так как для каждого клиента мы можем назначить другой сокет (как клиент IP будет определенно отличаться). Тот же клиент также может иметь два разъема, подключенных к тому же порту сервера - поскольку такие розетки отличаются от SRC-PORT ...

Сначала помните ниже двух правил:

  1. Первичный ключ сокета: A сокет идентифицируется по {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL} не по {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT} - Протокол является важной частью определения сокета .

  2. OS-процесс & Сокетка: процесс может быть связан с (может открывать/слушать) несколько сокетов, что может быть очевидным для многих читателей.

Пример 1: Два клиента подключения к тому же порту сервера означает: socket1 {SRC-А, 100, DEST-Х, 80, TCP} и socket2 {SRC-B 100, DEST-Х, 80, TCP}. Это означает, что хост A подключается к порту 80 сервера X, а другой узел B также подключается к одному серверу X к тому же порту 80. Теперь, как сервер обрабатывает эти два сокета, зависит от того, является ли сервер однопоточным или многопоточным (я буду объясните это позже). Важно то, что один сервер может одновременно прослушивать несколько сокетов.

More info here

+0

Спасибо За ваше мнение о том, как решить эту проблему и ответить на все вопросы! –

+0

Больше всего приветствуются. Если один из ответов наилучшим образом удовлетворит ваш вопрос, пожалуйста, примите его (отметьте) и повысьте все, что вы найдете полезным. – user919426

+1

сайт говорит, что мне нужна 15 репутация, и, поскольку все еще мой AC новый, я не могу, поэтому я пишу свое опт –

1

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

Да, вы можете. Просто объявить 2 разных IPEndPoint

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 8888); 
IPEndPoint localEndPoint2 = new IPEndPoint(ipAddress, 8880); 

и связать соответствующие гнезда к нему

Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

Socket s2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

s1.Bind(localEndPoint); 
s2.Bind(localEndPoint2); 
+0

Спасибо за информацию и быстрый ответ на THREAD! –