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