<?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。避免卡死。
(如果只有一个客户端和服务端在进行通讯,一般不会卡死,但是超过两个的话,会出现卡死的情况,所以设置超时时间,可以避免这种情况)