zoukankan      html  css  js  c++  java
  • PHP socket 简单使用示例(Windows)

    1. 只能在cli模式下运行,在浏览器中运行没有结果。
    2. 客户端socket程序示例(使用了cli 模式下的用户输入输出STDIN和STDOUT)
      <?php 
      
      $protocol = getprotobyname('tcp');
      $socket = socket_create(AF_INET, SOCK_STREAM, $protocol);
      
      if ($socket === false) {
          echo socket_last_error();
      } else {
          echo "
      socket created is ok.
      ";
      }
      
      $conn = socket_connect($socket, '127.0.0.1', 1324);
      
      $buffer = "
      hello, i am a client.
      ";
      socket_write($socket, $buffer, strlen($buffer));
      
      
      do{
          $read = socket_read($socket, 1024);
          if ($read === false) {
              echo '没有服务器器数据返回';
              break;
          } else {
              echo "server data is :
      ";
              echo $read, "
      ";
          }
          
          // 向命令行写入数据
          fwrite(STDOUT,"
      This is client console. Please input a argument:
      ");
          
          
          // 获取命令行手动输入的参数发送给服务器
          $arg = trim(fgets(STDIN));
          socket_write($socket, $arg, strlen($arg));
      
      } while (true);
      
      
      socket_close($socket);
      
      
      
      // cli mode 用户输入输出数据测试
      // for ($i = 0; $i <= 5; $i++) {
      //     fwrite(STDOUT,"Please input a argument:");
      //     $arg = trim(fgets(STDIN));
      //     echo $arg."
      ";
      // }
      View Code
    3. 服务端socket程序(经测试:socket_read()和socket_write(),函数第一个参数使用socket_create返回的资源$socket 不行。,socket_read()接收不到数据socket_write()也不能发送数据,必须使用socket_accept函数返回的资源$accept 才能正常获取到传输的数据)
      <?php 
      
      $protocol = getprotobyname('tcp');  //获取integer
      $socket = socket_create(AF_INET, SOCK_STREAM, $protocol);
      
      if ($socket === false) {
          echo socket_last_error();
      } else {
          echo "create socket is ok. use tcp protocol.
      ";
      }
      
      $bind = socket_bind($socket, '127.0.0.1', 1324);
      
      if ($bind === false) {
          echo socket_last_error();
      } else {
          echo "bind address and port successfully.
      ";
      }
      
      $listen = socket_listen($socket);
      
      if ($listen === false) {
          echo socket_last_error();
      } else {
          echo "service is listening...
      ";
      }
      
      // socket_set_nonblock($socket);
      
      do{
          $accept = socket_accept($socket);
          if (!$accept) {
              echo socket_last_error();
          } else {
              // print_r($accept);
              $read = socket_read($accept, 1024);       // 经测试:socket_read(),函数第一个参数使用socket_create返回的资源$socket 不行。,读取不到数据,必须使用socket_accept函数返回的资源$accept 才能正常获取到传输的数据
      
              if ($read === false) {
                  echo socket_last_error();
              } else {
                  echo $read;
                  $buffer = "
      hello  i am a server.
      ";
                  socket_write($accept, $buffer, strlen($buffer));
      
                  // 和客户端交互, 根据客户端输入参数返回不同的数据
                  while (true) {
                      $res = socket_read($accept, 1024);
                      if ($res === false) {
                          break;
                      }
      
      
                      echo "
      client sended : 
      ", $res;
                      
                      switch (substr($res, 0, 1)) {
                          case 'a':
                              $send_data = 'aaaaaaaaaa';
                              break;
                          case 'b':
                              $send_data = 'bbbbbbbbbb';
                              break;
                          case 'c':
                              $send_data = 'cccccccccc';
                              break;
                          default:
                              $send_data = 'dddddddddd';
                              break;
                      }
                      socket_write($accept, $send_data, strlen($send_data));
                  }
              }
          }
          // socket_close($socket);
      } while (true);
      
      socket_close($socket);
      View Code
    4. socket_shutdown() 关闭数据接收  或 数据发送 或 都关闭,0 :shutdown socket read。 1:shutdown socket  write 。 2:shutdown  socket read and write
  • 相关阅读:
    sonarque下载和安装使用
    npm install appium
    WIn10 电脑运行Docker
    AngularJs Type error : Cannot read property 'childNodes' of undefined
    Angular ui-route介绍
    Thymeleaf的模板使用介绍
    IntelliJ IDEA IDEA 2018 激活注册码
    session和cookies
    springmvc中的拦截器interceptor用法
    实现mapper接口注入的两种方式,以及后台的使用区别
  • 原文地址:https://www.cnblogs.com/bneglect/p/13518729.html
Copyright © 2011-2022 走看看