gpt4 book ai didi

PHP : Send an UDP broadcast message , 并等待响应

转载 作者:可可西里 更新时间:2023-10-31 22:48:41 24 4
gpt4 key购买 nike

我用这段代码发送了一条UDP广播消息

$ip = "255.255.255.255";
$port = 8888;
$str = "DEVICE_DISCOVERY";

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_sendto($sock, $str, strlen($str), 0, $ip, $port);

socket_recvfrom($sock, $buf, 20, 0, $ip, $port);
echo "Messagge : < $buf > , $ip : $port <br>";

socket_close($sock);

我希望某些特定的网络设备(在我的例子中是一些带有以太网屏蔽的 Arduino 板)响应特定的消息。

代码有效,但通过这种方式我无法打印所有响应,只能打印一个。

最佳答案

您需要一个 while 循环,如果在超时内没有响应,您将中断该循环。

首先设置超时时间,例如5秒:

socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>5,"usec"=>0));

还有循环:

while(true) {
$ret = @socket_recvfrom($sock, $buf, 20, 0, $ip, $port);
if($ret === false) break;
echo "Messagge : < $buf > , $ip : $port <br>";
}

完整代码:

$ip = "255.255.255.255";
$port = 8888;
$str = "DEVICE_DISCOVERY";

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
socket_sendto($sock, $str, strlen($str), 0, $ip, $port);

while(true) {
$ret = @socket_recvfrom($sock, $buf, 20, 0, $ip, $port);
if($ret === false) break;
echo "Messagge : < $buf > , $ip : $port <br>";
}

socket_close($sock);

关于PHP : Send an UDP broadcast message , 并等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31878823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com