Я работаю над клиент-серверным приложением, записанным в C. Я хочу широковещательно передать сообщение ко всем машинам, доступным в локальной сети.
Как я могу сделать то использование обычных системных вызовов сокета в C?
Просто отправьте сообщение на широковещательный адрес вашей подсети, который для 192.168.0.0/24 равен 192.168.0.255, или просто отправьте сообщение на 255.255.255.255.
вы должны использовать UDP для отправки широковещательного сообщения по сети. при создании сокета с помощью функции socket ()
укажите AF_INET
для параметра семейства
и SOCK_DGRAM
для типа
параметр. в некоторых системах вам необходимо разрешить отправку широковещательных пакетов, установив для параметра сокета SO_BROADCAST
значение 1, используя setsockopt ()
.
затем используйте вызов функции sendto ()
для отправки дейтаграммы и используйте 255.255.255.255
в качестве адреса назначения. (для сокетов дейтаграмм вам не нужно вызывать connect ()
, поскольку нет «соединения»).
в стандартных реализациях этот адрес транслируется на все компьютеры в локальной сети, это означает, что пакет не будет пересекать границы шлюза и не будет принят компьютерами, использующими сетевую маску, отличную от сетевой маски отправляющего компьютера.
посмотрите на сокеты udp.
Я рекомендую beej guide , взгляните на 6.3 Datagram Sockets
Вы можете использовать специальный адрес 255.255.255.255 для отправки широковещательного сообщения на каждый компьютер в локальной сети.
Для получения дополнительной информации см. раздел Широковещательная рассылка по IP-сети.