zoukankan      html  css  js  c++  java
  • php socket 编程(一)

    socket通常也称作"套接字"用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。
     
    php socket 编程(一) - 怀素真 - 因上努力 果上随缘
    服务端的流程如下:
    1、初始化信息并创建套接字(socket_create)
    2、绑定IP地址和端口(socket_bind)
    3、对端口进行监听(socket_listen)
    4、调用accept阻塞,等待有客户端连接(socket_accept)
    5、读取请求数据,并处理。(socket_read)
    6、发送处理后的数据(socket_write)
    7、关闭连接(socket_close)
    
    客户端的流程如下:
    1、初始化信息并创建套接字(socket_create)
    2、连接服务端(socket_connect)
    3、给服务端发送数据(socket_write)
    4、获取服务端返回的数据(socket_read)
    5、关闭连接(socket_close)
    
     
    服务端代码server.php如下:
    <?php
    //设置脚本执行时间,0表示没有限制
    set_time_limit(0);
    
    $ip = '127.0.0.1';
    $port = 6666;
    
    //创建一个TCP的套接字
    if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) {
        //如果创建失败,获取错误信息
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_create: {$errMsg}");
    }
    
    //绑定套接字
    if(socket_bind($socket, $ip, $port) === false) {
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_bind: {$errMsg}");
    }
    
    //监听
    if(socket_listen($socket, 5) === false) {
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_listen: {$errMsg}");
    }
    
    //循环处理客户端连接
    do {
        if(($clientSocket = socket_accept($socket)) === false) {
            $errMsg = socket_strerror(socket_last_error($socket));
            die("socket_accept: {$errMsg}");
        } else {
    
            //给客户端发送信息
            $msg = 'connect success';
            socket_write($clientSocket, $msg, strlen($msg));
        
            //读取客户端发来的信息
            $clientMsg = socket_read($clientSocket, 8192);
            echo "client msg: {$clientMsg}";
        }
        socket_close($clientSocket);
    } while (true);
    
    socket_close($socket);
    
    客户端代码client.php如下:
    <?php
    //设置脚本执行时间,0表示没有限制
    set_time_limit(0);
    
    $ip = '127.0.0.1';
    $port = 6666;
    
    //创建一个TCP的套接字
    if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) {
        //如果创建失败,获取错误信息
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_create: {$errMsg}");
    }
    
    //套接字连接
    if(socket_connect($socket, $ip, $port) === false) {
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_connect: {$errMsg}");
    }
    
    //发送信息给服务端
    $msg = "client post msg
    ";
    if(socket_write($socket, $msg, strlen($msg))) {
        echo "client post msg success
    ";
    }
    
    //循环接收服务端发来的信息
    while($serverMsg = socket_read($socket, 8192)) {
        echo "server msg: {$serverMsg} 
    ";
    }
    
    //关闭套接字
    socket_close($socket);
    
    (*注意代码需运行在cli下,进入到server.php代码目录)
    > php server.php
    
    我们通过如下命令查看,套接字是否创建成功。
    > netstat -ano
    
    php socket 编程(一) - 怀素真 - 因上努力 果上随缘
    可以看到6666端口已处在监听状态
     
    然后我们运行client.php程序
    > php client.php
    
    可以看到服务端接收到了客户端发送的数据
    php socket 编程(一) - 怀素真 - 因上努力 果上随缘
     客户端也收到了服务端发送的数据
    php socket 编程(一) - 怀素真 - 因上努力 果上随缘
     
     
     
     
  • 相关阅读:
    activiti 用户手册中 10分钟 小例子 简单代码搭建 及 其中的 各种坑
    Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例
    Project facet jst.web.jstl has not been defined.
    MySQL删除所有表的外键约束、禁用外键约束
    Unsupported major.minor version 52.0解决办法
    Could not update Activiti database schema: unknown version from database: '5.20.0.1'
    Android SDK下载地址
    Unity3d游戏中添加移动MM支付SDK问题处理
    Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)
    Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294597.html
Copyright © 2011-2022 走看看