UDP 通讯设置超时时间

<?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。避免卡死。

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

posted @ 2017-06-29 09:13  zbchls  阅读(9204)  评论(0编辑  收藏  举报