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