PHP中udp或tcp请求数据

本文介绍如何使用PHP通过UDP协议发送和接收数据。包括了需要发送数据以获取响应的情况及UDP直接接收数据的情况,并展示了如何设置socket请求超时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址 https://xiegaosheng.com/post/view?id=75

 

 

PHP中使用tcp或者udp请求数据,分为两种

1:需要向udp发送数据才能获取到返回值的

/**
*$service_port 端口号
*$address 服务器地址
*$in 发送的参数
**/
public 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, 0, $address, $service_port);
    
    // 关闭连接
    socket_close($socket);
    if (! empty($buffer)) {
        return $buffer;
    } else {
        echo "fail";
    }
}

2:udp直接就是吐数据不需要发请求

#设置超时不起作用不知道什么情况

/**
*$service_port 端口号
*$address 服务器地址
**/
public function getUdp($service_port, $address)
    {
        //服务器信息
        //如果是tcp 直接写tcp
        $server = "udp://$address:$service_port";
        //消息结束符号
        $msg_eof = "\n";
        $socket = stream_socket_server($server, $errno, $errstr, STREAM_SERVER_BIND);
          if (!$socket) {
                die("$errstr ($errno)");
            }
        $inMsg = stream_socket_recvfrom($socket, 1024, 0, $peer);
        fclose($socket);
        return $inMsg;
     
    }

socket请求设置请求超时

/**
 * Created by PhpStorm.
 * function: Get_socket_xdcoder_udp
 * Description: 获取udp数据
 * User: Xiaoxie
 * @param $service_port
 * @param $address
 * @return mixed
 * 
 */
public function Get_socket_xdcoder_udp($service_port, $address)
{
    $socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(
        "sec" => 1,
        "usec" => 0
    ));
    $ok = @socket_bind($socket,$address,$service_port);
    if ( $ok === false ) {
        echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
    }

    $from = '';
    $cport = 0;

    @socket_recvfrom($socket, $buffer, 1024,0, $from, $cport);
   // echo $from;
    return $buffer;
}
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢高升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值