Socket封装
博客专区 > 清澈 的博客 > 博客详情
Socket封装
清澈 发表于4年前
Socket封装
  • 发表于 4年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

<?php
// +----------------------------------------------------------------------
// | 新增udp传输
// +----------------------------------------------------------------------
// | author: bruce<376394074@qq.com>
// +----------------------------------------------------------------------
//

class Socket {
    protected $_config = array(
        'persistent'    => false,
        'host'            => 'localhost',
        'protocol'        => 'tcp',
        'port'            => 80,
        'timeout'        => 30
    );

    public $config = array();
    public $connection = null;
    public $connected = false;
    public $error = array();

    public function __construct($config = array()) {
        $this->config    =    array_merge($this->_config,$config);
        //echo getprotobyname($this->config['protocol']);
        if (!is_numeric($this->config['protocol'])) {
        //    $this->config['protocol'] = getprotobyname($this->config['protocol']);
        }
    }

    public function connect() {
        if ($this->connection != null) {
            $this->disconnect();
        }

        if ($this->config['persistent'] == true) {
            $tmp = null;
            if($this->config['protocol'] == 'tcp'){
                $this->connection = @pfsockopen($this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']);
            }else{
                $this->connection = @pfsockopen("udp://".$this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']);
            }
        } else {
            if($this->config['protocol'] == 'udp'){
                $this->connection = fsockopen("udp://".$this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']);
            }else{
                $this->connection = fsockopen($this->config['host'], $this->config['port'], $errNum, $errStr, $this->config['timeout']);
            }
        }

        if (!empty($errNum) || !empty($errStr)) {
            $this->error($errStr, $errNum);
        }

        $this->connected = is_resource($this->connection);

        return $this->connected;
    }

    public function error() {
    }

    public function write($data) {
        if (!$this->connected) {
            if (!$this->connect()) {
                return false;
            }
        }
        return fwrite($this->connection, $data, strlen($data));
    }

    public function writeByte($data, $len) {
        if (!$this->connected) {
            if (!$this->connect()) {
                return false;
            }
        }
        return fwrite($this->connection, $data, $len);
    }


    public function read($length=1024) {
        if (!$this->connected) {
            if (!$this->connect()) {
                return false;
            }
        }

        if (!feof($this->connection)) {
            return fread($this->connection, $length);
        } else {
            return false;
        }
        $this->disconnect();
    }
/**
 * 关闭连接
 */
    public function disconnect() {
        if (!is_resource($this->connection)) {
            $this->connected = false;
            return true;
        }
        $this->connected = !fclose($this->connection);

        if (!$this->connected) {
            $this->connection = null;
        }
        return !$this->connected;
    }

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

}

共有 人打赏支持
粉丝 1
博文 10
码字总数 1440
×
清澈
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: