<?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。避免卡死。
(如果只有一個客戶端和服務端在進行通訊,一般不會卡死,但是超過兩個的話,會出現卡死的情況,所以設置超時時間,可以避免這種情況)