2015-02-02 2 views
0

Я пытаюсь транслировать сообщения через зарегистрированный множественный клиент по протоколу UDP.Как транслировать через UDP-сокеты?

Я считаю, что нам нужно ниже две команды для отправки и получения через сокеты:

sendto(sock,buffer, 
      strlen(buffer),0,(const struct sockaddr *)&server,length); 

recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length); 

Как видим, нам нужно 6 аргумент в то же, второй последний является адрес получателя. В случае клиента к серверу у нас есть адрес. Но от сервера к клиенту мы имеем только адрес последнего клиента, из которого получено сообщение.

Я также пытался хранить адреса всех сокетов, которые подключаются к серверу по крайней мере один раз, так что мы можем использовать sendto(), но поскольку все клиенты работают на одном компьютере, это &from кажется таким же.

Какие альтернативы доступны? Где я иду не так? Я просто хочу передать сообщение всем клиентам, работающим на локальной машине. ?

+0

Я смущен. Вы имеете в виду 'multicast' вместо' broadcast'? –

+0

Я хочу отправить сообщение всем клиентам одновременно. – mkkhedawat

+0

проверьте структуру 'struct sockaddr_in'. Есть что-то под названием _port number_ ['sin_port']. –

ответ

0

Отправка широковещательных сообщений UDP по умолчанию может быть запрещена реализацией сетевого стека. Вам необходимо включить трансляцию в некоторых средах:

int allow_broadcast = 1; 
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void*) &allow_broadcast, sizeof(allow_broadcast)); 

Фактический список параметров setsockopt должен быть доступен в документации вашей операционной системы, как 1 или 2.

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

  • Нет связанных вопросов^_^