文档章节

Socket封装

清澈
 清澈
发布于 2014/06/11 15:08
字数 275
阅读 30
收藏 0

<?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
作品 0
西安
程序员
Socket总结 & node搭建简单的http服务器

网络中的进程 socket解决的是网络中进程间的通信,其首要解决的就是如何在网络中找到目标进程,这就要求进程拥有唯一性的索引,方便查找连接。 一台机器上,进程与进程之间通行,以PID作为唯...

烽穹寒渊
2016/08/25
0
0
Socket封装之聊天程序(二)

  今天,学习一下socket的封装。 类图   首先,我们把需要封装的各个类初步的设计如下:   接下来,我们建立类与类之间的关系:   其中,CStream类可有可无,这个类是用来封装各种读...

SherryX
06/26
0
0
Muduo网络库源码分析之Acceptor和TcpServer

Acceptor 用于 accept 一个 TCP 连接,accept 接受成功后通知 TCP 连接的使用者。Acceptor 主要是供 TcpServer 使用的,其生命期由后者控制。一个 Acceptor 相当于持有服务端的一个 socket 描...

Tanswer_
01/12
0
0
浅谈网络游戏的设计——服务器端编程

本游戏服务器端操作系统采用UNIX,因为UNIX是标准的服务器操作系统,可保证网络游戏的稳定性。因此,以下所有的编程都将针对UNIX进行。 服务器端的整体构架如下:通讯模块,消息传递模块,游...

扶殊88
2011/12/08
0
0
Socket开发框架之框架设计及分析

虽然在APP应用、Web应用、Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利、压力监测方面...

walb呀
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SSM框架整合Shiro后的开发

手摸手教你SSM框架整合Shiro后的开发 前面,我们学习了Shiro实现权限管理之表结构设计以及JQuery-Ztree.js使用范例 ,接下来就详细介绍一下SSM框架整合Shiro框架后的开发。同样推荐大家参看张...

TyCoding
12分钟前
1
0
Vivado使用误区与进阶

vivado的相关认知。xilinx的专家写的文章。

whoisliang
18分钟前
1
0
使用Nagios打造专业的业务状态监控

想必各个公司都有部署zabbix之类的监控系统来监控服务器的资源使用情况、各服务的运行状态,是否这种监控就足够了呢?有没有遇到监控系统一切正常确发现项目无法正常对外提供服务的情况呢?本...

37丫37
19分钟前
2
0
自定义操作RxJava 学习笔记

二十三,有点让我想起《风云》里面的剑二十三式 RxJava提供了一套非常强大的操作集。如果计算所有重载次数,Rx上的运算符数量超过300。其中少数运算符必不可少,这意味着没有它们就无法实现R...

woshixin
35分钟前
1
0
mysql视图

测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用实在是太强大了,以下是我体验过的好处: 作用一: 提高了重用性,...

郭周园
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部