2013-07-24 5 views
3

Скажите, что я хочу получать данные от 239.1.2.3:20000, а также от 239.4.5.6: 0001 в программе linux C. Могу ли я сделать это только с одним сокетом?Получение многоадресных данных из разных групп в одном и том же сокете в linux

Я могу присоединиться к нескольким конечно групп на сокете с помощью опции setsockopt IP_ADD_MEMBERSHIP, но так как порты разные, я не уверен, если это возможно, каким-то образом «привязать к обоим портам»

Спасибо.

ответ

4

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

0

В TCP должен быть один сокет на одного клиента. Это связано с тем, что сокет должен иметь соединение «принято». Это делается путем вызова accept на прослушивающем сокете сервера и возвращает новый сокет (с новым портом), который обозначает это конкретное соединение клиент-сервер.

В UDP нет «соединения», но скорее вы просто отправляете данные в сокет и надеетесь, что он туда попадет (это может быть не так). Если вы используете сокет UDP, все ваши клиенты могут отправлять ему данные, и вашему серверу не придется принимать вызов при входящих подключениях. Вам нужно будет создать свой собственный протокол для идентификации клиентов, отправляющих сообщения (внутри hte-сообщения, которое вам нужно проанализировать, чтобы увидеть, есть ли его клиент 1 или клиент2).

Сообщите мне, если это неясно.

+1

Все верно, но не отвечает на вопрос. – EJP

+0

Все верно * кроме *, что «с новым портом» неверно. – EJP

Смежные вопросы