Windows — PHP socket_recv не получает многоадресных данных

Я пытаюсь прочитать данные многоадресной рассылки, отправленные SMA EMeter под Windows Server 2016 (PHP версии 7.1)

    // Listen to Multicast
$port = 9522 ;  // Multicast Port used by SMA
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
echo "Read SMA Energymeter ->  socket creation done: ".$socket."\n";
$bindip="0.0.0.0"; // local unspecified
if(!socket_bind($socket,$bindip,$port)) {echo "Read SMA Energymeter ->  bind failed\n"; exit();  }
echo "Read SMA Energymeter ->  bind on port: ".$port." ip: ".$bindip." done\n";

$adress = "239.12.255.254"; // Multicast IP used by SMA
$ret=socket_set_option($socket,IPPROTO_IP,MCAST_JOIN_GROUP,array("group"=>$adress,"interface"=>0));
if ($ret === false) {echo "Read SMA Energymeter -> Unable to join multicast group";exit();  }
echo "Read SMA Energymeter ->  MCAST join sucessfully done: ".$adress."\n";

$fromport= 0;
$flags   = 0 ;
$from = '';//"192.168.1.116" ;
$raw = "That is the return buffer";
$len = 700 ; // sind rund 600 Bytes vom SMA zu erwarten

echo "Read SMA Energymeter ->  start retrieval. Len:".$len."\n";
$bytes=socket_recvfrom($socket,$raw,$len,$flags,$from,$fromport);
//$bytes=socket_recv($socket,$raw,$len,$flags);
echo "Read SMA Energymeter ->  socket recieved done. Bytes:".$bytes."\n";

Проблема socket_recv никогда не возвращается. Похоже, данные не получены. Wireshark показывает 1-2 пакета (каждый 600Bytes) [1], отправляющихся каждую секунду. Монитор Perf показывает, что php прослушивает порт 9522 [2].

https://i.stack.imgur.com/jjYYa.png [1]

https://i.stack.imgur.com/4uQqt.png [2]

Есть идеи, что может быть не так?

0

Решение

Проблема в том, что под окнами исходящий MC IF основан на таблице маршрутизации.
Если вы используете несколько сетевых карт, вам нужно удалить маршруты MC и добавить их в IF, если вы хотите их использовать. Как в моем случае:

route delete 224.0.0.0 mask 240.0.0.0
route add 224.0.0.0 mask 240.0.0.0 192.168.1.63

очевидно, другие приложения, которые могут потребовать отправить MCAST на предыдущей, если больше не будут работать 🙁

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]