zoukankan      html  css  js  c++  java
  • php编写TCP服务端和客户端程序

    1、修改php.ini,打开extension=php_sockets.dll

    2、服务端程序SocketServer.php

    <?php  
    //确保在连接客户端时不会超时  
    set_time_limit(0);  
    //设置IP和端口号  
    $address = "127.0.0.1";  
    $port = 3046; 
    /** 
     * 创建一个SOCKET  
     * AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6 
     * SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM 
    */  
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n");  
    //阻塞模式  
    socket_set_block($sock) or die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n");  
    //绑定到socket端口  
    $result = socket_bind($sock, $address, $port) or die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n");  
    //开始监听  
    $result = socket_listen($sock, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n");  
    echo "OK
    Binding the socket on $address:$port ... ";  
    echo "OK
    Now ready to accept connections.
    Listening on the socket ... 
    ";  
    do { // never stop the daemon  
        //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息  
        $msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");  
        while(1){
            //读取客户端数据  
            echo "Read client data 
    ";  
            //socket_read函数会一直读取客户端数据,直到遇见
    ,	或者字符.PHP脚本把这写字符看做是输入的结束符.  
            $buf = socket_read($msgsock, 8192);  
            echo "Received msg: $buf   
    ";
    
            if($buf == "bye"){
                //接收到结束消息,关闭连接,等待下一个连接
                socket_close($msgsock);
                continue;
            }
              
            //数据传送 向客户端写入返回结果  
            $msg = "welcome 
    ";  
            socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");          
        }  
          
    } while (true);  
    socket_close($sock);  
    ?>

    3、客户端程序SocketClient.php

    <?php  
    set_time_limit(0);  
      
    $host = "127.0.0.1";  
    $port = 3046;  
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket
    ");  
       
    $connection = socket_connect($socket, $host, $port) or die("Could not connet server
    "); 
    socket_write($socket, "hello socket") or die("Write failed
    ");
    while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {  
        echo("Response was:" . $buff . "
    ");
        echo("input what you want to say to the server:
    ");
        $text = fgets(STDIN);
        socket_write($socket, $text);
    }  
    socket_close($socket);
    ?>

    4、测试

          运行服务端程序:C:wampinphpphp5.4.16php.exe C:wampwwwSocketServer.php

         运行客户端程序: C:wampinphpphp5.4.16php.exe C:wampwwwSocketClient.php

    5、其流程与C很相似,实际上就是封装了C的socket。

    转:http://blog.csdn.net/anda0109/article/details/46655301

  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/hubing/p/4942615.html
Copyright © 2011-2022 走看看