PHP:发送UDP广播消息,并等待响应

我用这个代码发送一个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),$ip,$port);

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

socket_close($sock);

我想要一些特定的网络设备(在我的例子中是一些具有以太网屏蔽的Arduino板卡)响应一个特定的消息.

代码的工作原理,但是这样我就无法打印所有的响应,只能打印一个.

你需要一个while循环,如果在超时时间内没有响应,你将打破它.

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

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

循环:

while(true) {
  $ret = @socket_recvfrom($sock,$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,1);
socket_set_option($sock,"usec"=>0));
socket_sendto($sock,$port);

while(true) {
  $ret = @socket_recvfrom($sock,$ip : $port <br>";
}

socket_close($sock);

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...