加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:13:22 所属栏目:PHP教程 来源:网络整理
导读:我用这个代码发送一个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
我用这个代码发送一个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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读