Группа присоединения к многоадресной рассылке с двумя разными сокетами

Я создаю многоадресное серверное/клиентское приложение udp на C, в котором сервер отправляет данные многоадресной группе клиентов, и если данные не получены, клиенты запрашивают повторную передачу. Я думал создать два сокета на стороне сервера и на стороне клиента. На стороне сервера один сокет для отправки многоадресной рассылки и другой для получения ответов от клиентов. И на стороне клиента один сокет для получения данных и другой для ответа обратно на сервер. Что меня смущает, так это то, что сокет подключен к группе многоадресной рассылки... клиент присоединяется к этой группе с помощью сокета. Могу ли я использовать два сокета и одну многоадресную группу или мне следует создать две группы? Какое самое эффективное решение? У меня не может быть задержек, потому что это будет в режиме реального времени... у вас есть совет?

Спасибо


person user3119422    schedule 19.03.2014    source источник
comment
я думаю, вы должны использовать один и тот же сокет как для отправки сообщения, так и для получения подтверждения.   -  person Heena Goyal    schedule 19.03.2014
comment
У вас есть какие-то аргументы, почему нелогично использовать один сокет для отправки, а другой для получения? Как насчет реализации многоадресной рассылки, если я решил использовать два сокета? У вас есть опыт?   -  person user3119422    schedule 19.03.2014
comment
да, у меня есть много стандартных протоколов, таких как 101 103 Modbus. они являются стандартами для связи, и нет второго порта, определенного для подтверждения. и не говорите мне, что вы будете использовать третий сокет для передачи данных   -  person Heena Goyal    schedule 19.03.2014
comment
Вам нужно больше потоков на стороне сервера для обработки подтверждения или достаточно одного потока? Почему тогда некоторые протоколы, такие как tftp, используют разные порты для отправки и получения? Извините, я запутался...   -  person user3119422    schedule 19.03.2014
comment
не путайте, будет два потока, один из которых постоянно пишет в этот сокет, а другой одновременно читает один и тот же сокет.   -  person Heena Goyal    schedule 19.03.2014
comment
У меня проблема с кодом, если я вызываю pthread_create с функцией обработки сообщений, пока она работает нормально, я получаю сообщения от клиентов. Но если я создаю pthread перед while, а затем во время вызова функции для обработки сообщений, я ничего не получаю от клиентов ...int main(){ // структура arg имеет сокет sd pthread_create(&cln_thread, NULL, msg_processing, (void *) &arg)) while(1){ sendto на широковещательном IP msg_processing } } msg_processing (&arg) { recvfrom клиентов на том же сокете, что и отправка sd }   -  person user3119422    schedule 19.03.2014


Ответы (1)


На стороне сервера один сокет для отправки многоадресной рассылки и другой для получения ответов от клиентов.

Точно нет.

И на стороне клиента один сокет для получения данных и другой для ответа обратно на сервер.

Точно нет.

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

person user207421    schedule 19.03.2014
comment
И нет ли недостатков при использовании одной розетки? У меня будет больше клиентов, и все они смогут отправлять ответы только через один сокет? Безопасно ли со стороны сервера постоянно отправлять данные и одновременно получать все эти ответы? Должен ли сервер иметь больше потоков для обработки ответов? - person user3119422; 19.03.2014
comment
Какую часть «нет производительности или архитектурных причин для использования двух портов» вы не поняли? - person user207421; 19.03.2014
comment
Часть задержки, если мне нужно приложение в реальном времени, будет ли обработка с одним сокетом и одним потоком влиять на задержку? - person user3119422; 19.03.2014
comment
Я ничего не говорил про одну тему. Как и ваш вопрос. - person user207421; 19.03.2014