2010-02-27 2 views
4

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

Как это сделать, используя обычные системные вызовы сокетов в C?

+0

«в сети» слишком расплывчато. Вы имеете в виду только локальную сеть? – bortzmeyer

+0

Я имел в виду в локальной сети. Спасибо bortzmeyer, я нашел свой ответ: 192.168.0.255 :) – Zenet

ответ

3

Просто отправьте сообщение на широковещательный адрес вашей подсети, который для 192.168.0.0/24 равен 192.168.0.255 или просто передается по адресу 255.255.255.255.

1

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

Для получения дополнительной информации см. Раздел IP Network Broadcasting.

2

Посмотрите на разъемы udp.

Я рекомендую beej guide, посмотрите на 6,3 Datagram Sockets

+0

Ссылка сломана, ответ довольно бесполезен, как этот. –

6

вы должны использовать UDP для отправки широковещательного сообщения по сети. при создании гнезда с использованием функции socket() укажите AF_INET для параметра family и SOCK_DGRAM для параметра type. на некоторых системах вам необходимо включить отправку широковещательного пакета, установив опцию сокета SO_BROADCAST в 1, используя setsockopt().

затем используйте вызов функции sendto() для отправки дейтаграммы и используйте адрес 255.255.255.255 в качестве адреса назначения. (для сокетов датаграмм вам не нужно звонить connect(), так как нет «соединения»).

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

+0

В чем разница в использовании IP-адресов '255.255.255.255' и' 224.0.0.0'? –

+1

@AlexisWilke: диапазон 224.0.0.0/4 зарезервирован для многоадресной рассылки. многоадресная рассылка - это целый другой зверь, чем трансляция: услуги сгруппированы, конкретному хосту необходимо «присоединиться» к группе многоадресной рассылки, чтобы получать многоадресные пакеты, отправленные этой группе, некоторые группы четко определены и им назначается определенный IP-адрес. обратите внимание, однако, что некоторые группы ведут себя как широковещательные группы (например, 224.0.0.1). также обратите внимание, что поддержка multicast не является обязательной для ipv4. см. [wikipedia] (https://en.wikipedia.org/wiki/Multicast_address) и [tldp] (https://www.tldp.org/HOWTO/Multicast-HOWTO.html) –

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