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 编程(一) - 怀素真 - 因上努力 果上随缘
     
     
     
     
  • 相关阅读:
    《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
    《Django By Example》第十一章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第十章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第八章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
    我的superui开源后台bootstrap开发框架
    LayoutInflater 总结
    Android屏幕分辨率概念(dp、dip、dpi、sp、px)
    android studio安装问题
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294597.html
Copyright © 2011-2022 走看看