<?php function Send_socket_xdcoder_udp($service_port, $address, $in) { //采用php socket技术使用UDP协议连接设备 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
//设置超时时间为两秒 @socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 2, "usec" => 0)); //发送命令 @socket_sendto($socket, $in, strlen($in), 0, $address, $service_port); @socket_recvfrom($socket, $buffer, 1024, MSG_WAITALL, $address, $service_port); //关闭连接 socket_close($socket);
//如果服务端2s未返回数据 if (!empty($buffer)) { return $buffer; } else { echo "err"; } } Send_socket_xdcoder_udp(8888, '127.0.0.1', '11111');
因为udp通讯是不可靠的通讯,有时客户端已经发送了消息,但是服务端可能没收到,这时客户端就会一直等待服务端的返回,导致程序一直死等,如果给udp设置一个超时时间,超过两秒未返回数据,就返回err。避免卡死。
(如果只有一个客户端和服务端在进行通讯,一般不会卡死,但是超过两个的话,会出现卡死的情况,所以设置超时时间,可以避免这种情况)