zoukankan      html  css  js  c++  java
  • php 基于socket的基本通信

    php 基于socket的基本通信

    1、前言

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    这种介绍度娘很多,希望了解更多的自行百度,往下看的朋友记得先开启socket扩展;

    2、创建socke服务器端

    基本步骤:

    • 初始化86socket
    • 端口绑定
    • 端口进行监听
    • 调用accept阻塞
    • 等待客服端连接

    3、服务器端代码实现

    <?php
    echo "****************server*****************
    ";
    //设置 IP 和 端口(端口必须保证不被占用,且允许被外部访问)
    $ip = "127.0.0.1";
    $port = 1935;
    
    //超时设计
    set_time_limit(0);
    
    //创建socket
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("创建socket失败,原因为:{socket_strerror($socket)}
    ");
    
    //绑定socket到指定ip和端口
    $ret = socket_bind($socket, $ip, $port) or die("绑定socket失败,原因为:{socket_strerror($ret)}
    ");
    
    //监听socket,最大等会数为4
    $ret = socket_listen($socket, 4) or die("监听socket失败,原因为:{socket_strerror($ret)}
    ");
    
    //计数
    $count = 0;
    echo "等待连接!!!
    ";
    do {
        //收到请求连接
        //调用子socket处理信息
        $msgsock = socket_accept($socket);
        if(!$msgsock){
            echo "socket阻塞失败,原因为:{socket_strerror($msgsock)}
    ";
        }
        $msg = "<p style='color:red'>连接成功</p>";
        //处理客服端输入并返回数据
        socket_write($msgsock, $msg, strlen($msg));
        $buf = socket_read($msgsock, 8192);
        $talkback = "收到的信息为:{$buf}
    ";
        echo $talkback;
    
        if(++$count > 5) {
            break;
        }
        socket_close($msgsock);
    } while(true);
    
    socket_close($socket);

    4、创建slient客户端

    基本步骤:

    • 使用TCP协议创建一个socket资源
    • 连接socket服务器
    • socket_write 传输数据
    • socket_read 接收数据
    • 关闭socket资源

    5、客户端代码实现

    <?php
    echo '****************client*****************<br/>';
    //设置 IP 和 端口 
    $port = 1935;
    $ip = '127.0.0.1';
    
    //超时设计
    set_time_limit(0);
    
    //创建TCP协议的socket资源
    $socket  = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('socket_create 失败:'.socket_strerror($socket));
    echo '创建成功<br/>';
    $restult = socket_connect($socket, $ip, $port);
    echo '连接成功<br/>';
    
    $in = '创建一个sokcet客服端成功,随机编号='.rand(1000,9999);
    if(socket_write($socket, $in, strlen($in))) {
        echo '发送成功,发送信息为'.$in.'<br/>';
    } else {
        echo '发送失败,原因为'.$socket_strerror($socket).'<br/>';
    }
    
    while($out = socket_read($socket, 8192)) {
        echo '接收信息成功,信息为'.$out.'<br/>';
    }
    
    echo 'socket关闭<br/>';
    socket_close($socket);
    echo '关闭完成<br/>';

    6、开启客服端

    7、使用客户端连接服务端

    服务端状态:

    到这里socket的基本连接就差不多了。

    8、相关行数介绍

    8.1、socket_create

    用于创建一个socket资源,成功返回一个套接字,失败返回false;

    详情参考:http://www.php.net/manual/zh/function.socket-create.php

    8.2、socket_bind

    绑定一个名称到socket,成功返回true,失败返回时false;

    详情参考:http://php.net/manual/en/function.socket-bind.php

    8.3、socket_listen

    监听一个socket资源,成功返回true,失败返回时false;

    详情参考:http://php.net/manual/zh/function.socket-listen.php

    8.4、socket_accept

    合法创建一个子socket,成功返回一个新的socket资源,失败返回false;

    详情参考:http://www.php.net/manual/en/function.socket-accept.php

    8.5、socket_read

    读取客服端发送的信息,成功返回读取的信息,否则返回空字符串

    socket_read() returns a zero length string ("") when there is no more data to read.)

    详情参考:http://www.php.net/manual/en/function.socket-read.php

    8.6、socket_write

    想socket写入数据到缓存

    详情参考:http://php.net/manual/en/function.socket-write.php

    8.7、socket_close

    关闭socket资源

    详情参考:http://php.net/manual/zh/function.socket-close.php

    8.8、socket_strerror

    获取错误信息

    详情参考:http://php.net/manual/zh/function.socket-strerror.php

  • 相关阅读:
    实现一个简易版的react
    浅学virtualDom和diff算法
    148. 排序链表 归并排序 | 快速排序
    OC中的NSDictionary和NSMutableDictionary
    OC中的block
    OC中的category&Extension
    OC中判断方法是否实现
    OC的分组导航标记
    OC中程序的内存分布&类加载
    OC中的@property和@synthesize
  • 原文地址:https://www.cnblogs.com/ImCehnyx/p/7359968.html
Copyright © 2011-2022 走看看