UDP широковещание отправлять из PHP и получать в C # - PullRequest
3 голосов
/ 11 июля 2011

Я пытаюсь отправить широковещательное UDP-сообщение в приложение C #.Я попробовал следующий код, чтобы отправить сообщение.Который я нашел на сайте php.net как комментарий к странице руководства socket_sendto .

<?php 
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1); 
socket_sendto($sock, $broadcast_string, strlen($broadcast_string), 0, '255.255.255.255', $port); 
?>

Это не работает для меня, может быть, это мойсеть.

Но это сработает, если я заменю широковещательный IP '255.255.255.255' своим конкретным IP, например '192.168.1.128'.Я вижу, что это сообщение приходит с Wireshark, хотя я не могу видеть это, используя приведенный выше код.Это наводит меня на мысль, что с PHP-частью кода что-то не так.Я действительно хочу использовать широковещательную рассылку или мультикастинг для своей программы, поэтому сейчас я немного застрял;)

Я использую следующее на стороне приема (C #) (для тестирования):

UdpClient subscriber = new UdpClient(15000);

IPEndPoint ep = new IPEndPoint(IPAddress.Any, 15000); ;

byte[] pdata = subscriber.Receive(ref ep);
string data = Encoding.ASCII.GetString(pdata);
MessageBox.Show(data);
subscriber.Close();

Есть идеи, что может быть причиной этого?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

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

socket_sendto($sock, $broadcast_string, strlen($broadcast_string), MSG_DONTROUTE, '255.255.255.255', $port);
1 голос
/ 11 июля 2011

255.255.255.255 - это «ограниченная» трансляция, тогда как ваша 192.168.1.255 - «направленная» трансляция.Ограниченное в простых терминах означает, что оно отправляется только внутри локальной сети.Локальная сеть, как определено непосредственно подключенными узлами, то есть между ними нет маршрутизатора.Маршрутизаторы - за некоторыми исключениями - не пропускают ограниченную трансляцию, а направляют трансляцию.

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

...