问题描述
我已经看过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 (将#修改为@)