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 编程(一) - 怀素真 - 因上努力 果上随缘
     
     
     
     
  • 相关阅读:
    2016计算机专业考研:c++大学教程第二版目录(下)
    2016考研计算机考研备考书籍推荐
    2014年计算机考研真题重点选择题部分真题及解析
    2016计算机考研:数据结构常用算法精析
    2015考研计算机专业基础综合试题真题及答案(1)
    java串讲之String 如何定义字符串对象
    WindowsService
    sql 将datetime类型转化为指定格式的字符串
    C# 利用SMTP异步发送邮件
    Visual Studio
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294597.html
Copyright © 2011-2022 走看看