Как транслировать сообщение в сети? - PullRequest
6 голосов
/ 27 февраля 2010

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

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

Ответы [ 4 ]

6 голосов
/ 27 февраля 2010

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

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

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

6 голосов
/ 27 февраля 2010

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

2 голосов
/ 27 февраля 2010

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

Рекомендую Руководство Beej , взгляните на 6.3 датаграмм сокетов

1 голос
/ 27 февраля 2010

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

Подробнее см. В разделе Сетевое вещание IP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...