文档章节

Socket封装

清澈
 清澈
发布于 2014/06/11 15:08
字数 275
阅读 30
收藏 0
点赞 0
评论 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封装之聊天程序(二)

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

SherryX ⋅ 01/29 ⋅ 0

Muduo网络库源码分析之Acceptor和TcpServer

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

Tanswer_ ⋅ 01/12 ⋅ 0

浅谈网络游戏的设计——服务器端编程

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

扶殊88 ⋅ 2011/12/08 ⋅ 0

COMM 基本结构设计(一)

自己做了一个简单的队列服务,设计了一下: 基本结构如下: 工程布局如下: COMMSocketLib:工程socket封装 COMMUtil: 工程常用类封装 COMMClient:应用程序开发人员使用接口封装 COMMServer...

西昆仑 ⋅ 2012/04/29 ⋅ 0

tornado源码分析系列一

先来看一个简单的示例: #!/usr/bin/env python coding:utf8 import socket def run(): sock = socket.socket(socket.AFINET, socket.SOCKSTREAM) sock.bind(('127.0.0.1',8008)) sock.liste......

AltBoy ⋅ 2017/08/23 ⋅ 0

Socket开发框架之框架设计及分析

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

walb呀 ⋅ 2017/12/04 ⋅ 0

谈谈 Tomcat 请求处理流程

原文出处:Rainstorm 建议结合《谈谈 Tomcat 架构及启动过程[含部署]》一起看! 很多东西在时序图中体现的已经非常清楚了,没有必要再一步一步的作介绍,所以本文以图为主,然后对部分内容加以...

Rainstorm ⋅ 01/06 ⋅ 0

quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket

在 quick-cocos2d-x 中,默认集成了 LuaSocket 和 WebSocket 两个 Socket 库。那么,在开发需要长连接的手机游戏时,应该选择哪个库呢?下面从几个方面进行比较: 跨平台; 易用性; 性能; ...

千山万水 ⋅ 2013/11/26 ⋅ 1

TCP/IP HTTP Socket的关系

先看下面这个图 网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 一般我们都知道IP协议对应于网络层,TCP对应于传输层、http协议对应于应用层,三者这这...

种地瓜 ⋅ 2016/03/22 ⋅ 0

Java网络编程之UDP

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送...

学-无止境 ⋅ 2016/04/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kubeflow实战系列:利用TFJob导出分布式TensorFlow模型

介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob导出分布式模型训练模型。 第一篇:阿里云上使用JupyterHub 第二篇:阿里云上小试TFJob 第三篇:利用TFJob运行...

全部原谅 ⋅ 22分钟前 ⋅ 0

007. 深入JVM学习—老年代

老年代空间的主要目的是用于存储由Eden发送来的对象,一般在经历好几次“Minor GC”还会保存下来的对象,才会被复制到老年代,这样就可以存放更多的对象,同时在老年代中执行GC的次数也相对较...

影狼 ⋅ 23分钟前 ⋅ 0

常见的一些C#开源框架或者开源项目

原:https://blog.csdn.net/qq_27825451/article/details/70666044 Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更......

whoisliang ⋅ 24分钟前 ⋅ 0

设计模式基本原理

刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太...

王子城 ⋅ 27分钟前 ⋅ 0

阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲

摘要: 自从去年11月以来,阿里巴巴高度重视数据中心的网络改造、云产品改造、应用及网络改造等多个维度,经过半年以来的建设,阿里云已经完成了域名解析等关键产品的分析,现在阿里云已经完...

传授知识的天使 ⋅ 38分钟前 ⋅ 0

windows Android sdk 配置

1、下载Android SDK,点击安装,直接默认路径即可! 下载地址:http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系...

阿豪boy ⋅ 40分钟前 ⋅ 0

bash shell script 简明教程

User <--> bash <--> kernel shell is not kernel or part of kernel various shells: tcsh, csh, bash, ksh find the using shell: echo $SHELL find all the shells: cat /etc/shells what......

mskk ⋅ 43分钟前 ⋅ 0

Service Mesh简史

William Morgan Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公...

好雨云帮 ⋅ 43分钟前 ⋅ 0

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 55分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 56分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部