PHP-Windows上的多播套接字服务器

问题描述

我已经看过PHP Multicast server using sockets,也没有帮助。所以我发表了我的问题。 我正在尝试接收(并响应)多播消息(我是服务器)。

我当前的代码是:

///helper function
function sock_err($socket,$n=0){
    if ($socket === false) {
    echo "$n - socket_create() Failed: reason: " . socket_strerror(socket_last_error());
    exit(1);
    }
    
    echo "OK $n".PHP_EOL;
}
////

$multicast_group = '228.100.100.100';
$host= "0.0.0.0";
$port = 22800;

echo "WS://$host:$port".PHP_EOL; //interface I'm listening


$socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP) or die("Could not create socket\n");
sock_err($socket,1); //(OK)
socket_set_option($socket,IPPROTO_IP,MCAST_JOIN_GROUP,['group' => $multicast_group ]);
sock_err($socket,2);  //(OK)

socket_set_option($socket,IP_MULTICAST_TTL,2);
sock_err($socket,3); //(OK)

$result = socket_bind($socket,$host,$port) or die("Could not bind to socket\n");
sock_err($socket,4); //(OK)

if (!defined('MSG_DONTWAIT')) { define('MSG_DONTWAIT',0x20); }


while(true){
    echo "Waiting data ... \n";
    
    //Receive some data
    $r = socket_recvfrom($socket,$buf,512,constant('MSG_DONTWAIT'),$remote_ip,$remote_port);
    echo "$remote_ip : $remote_port -- " . $buf;
    
    //Send back the data to the client
    socket_sendto($socket,"OK " . $buf,100,$remote_port);
    
}


这将产生:

PS >> PHP -f .\sock_so.PHP

WS://0.0.0.0:22800
OK 1
OK 2
OK 3
OK 4
Waiting data ...
PHP Warning:  socket_recvfrom(): unable to recvfrom [10045]: Operazione richiesta non supportata per il tipo di oggetto indicato.
 in C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP on line 39
PHP Stack trace:
PHP   1. {main}() C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP:0
PHP   2. socket_recvfrom() C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP:39

Warning: socket_recvfrom(): unable to recvfrom [10045]: Operazione richiesta non supportata per il tipo di oggetto indicato.
 in C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP on line 39

Call Stack:
    0.4055     404448   1. {main}() C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP:0
    0.4072     404640   2. socket_recvfrom() C:\Users\Davide-Locale\Desktop\Socket_PHP\sock_so.PHP:39


Variables in local scope (#1):
  $buf = NULL
  $host = '0.0.0.0'
  $multicast_group = '228.100.100.100'
  $port = 22800
  $r = *uninitialized*
  $remote_ip = NULL
  $remote_port = NULL
  $result = TRUE
  $socket = resource(4) of type (Socket)

 :  --

PS Wireshk从服务器查找数据。 这是数据包转储:

0000   01 00 5e 64 64 64 00 50 b6 1b a7 5d 08 00 45 00   ..^ddd.P...]..E.
0010   00 23 ad bc 00 00 01 11 fa 97 c0 a8 08 05 e4 64   .#.............d
0020   64 64 59 10 59 10 00 0f 7e ea 72 65 71 75 65 73   ddY.Y...~.reques
0030   74 00 00 00 00 00 00 00 00 00 00 00               t...........

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...