很简单的一个socket客户端PHP类

本文介绍了一个 PHP 实现的 Socket 操作类,用于创建 Socket 连接,并提供了向服务器写入数据及读取响应的功能。该类还包含了错误处理机制,确保了通信过程中的稳定性。

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

<?php

// socke操作类
class Socket
{
    private $host; // 连接socket的主机
    private $port; // socket的端口号
    private $error = array();
    private $socket = null; // socket的连接标识
    private $queryStr = ""; // 发送的数据

    public function __construct($host, $port)
    {
        if (!extension_loaded("sockets")) {
            exit("请打开socket扩展 ");
        }
        if (empty($host)) exit("请输入目标地址");
        if (empty($port)) exit("请输入有效的端口号");
        $this->host = $host;
        $this->port = $port;
        $this->CreateSocket(); // 创建连接
    }

    // 创建socket 
    private function CreateSocket()
    {
        !$this->socket && $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//创建socket
        $r = @socket_connect($this->socket, $this->host, $this->port);
        if ($r) {
            return $r;
        } else {
            $this->error[] = socket_last_error($this->socket);
            return false;
        }
    }

    // 向socket服务器写入数据并读取
    public function wr($contents)
    {
        $this->queryStr = "";
        $this->queryStr = $contents;
        !$this->socket && $this->CreateSocket();
        $contents = $this->fliterSendData($contents);
        $result = socket_write($this->socket, $contents, strlen($contents));
        if (!intval($result)) {
            $this->error[] = socket_last_error($this->socket);
            return false;
        }
        $response = socket_read($this->socket, 12048);
        if (false === $response) {
            $this->error[] = socket_last_error($this->socket);
            return false;
        }
        return $response;
    }

    // 对发送的数据进行过滤
    private function fliterSendData($contents)
    {
        //对写入的数据进行处理
        return $contents;
    }

    // 所有错误信息
    public function getError()
    {
        return $this->error;
    }

    // 最后一次错误信息
    public function getLastError()
    {
        return $this->error(count($this->error));
    }

    // 获取最后一次发送的消息
    public function getLastMsg()
    {
        return $this->queryStr;
    }

    public function getHost()
    {
        return $this->host;
    }

    public function getPort()
    {
        return $this->port;
    }

    //关闭socket连接
    private function close()
    {
        $this->socket && socket_close($this->socket); // 关闭连接
        $this->socket = null; // 连接资源初始化
    }

    public function __destruct()
    {
        $this->close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值