好好爱自己!

php socket 测试

参考:

https://www.jianshu.com/p/00357c8cd22d

server.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ser = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr) or die("created server failed!");
while(1) {
  $conn = stream_socket_accept($ser);
  if (pcntl_fork() == 0) {
    while(1) {
     $request = fread($conn, 1024);
    // do something
    $response = "hello, world!" . $request;
   fwrite($conn, $response);
 
    }
        //fclose($conn);
    //exit(0);
 
  }

  之前,旧的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$ser = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr) or die("created server failed!");
while(1) {
  $conn = stream_socket_accept($ser);
  if (pcntl_fork() == 0) {
    $request = fread($conn, 1024);
    // do something
    $response = "hello, world!" . $request;
    fwrite($conn, $response);
    fclose($conn);
    exit(0);
     
  }
}
                                                                                                     

  旧的版本,可以用客户端 telnet 来进行测试,用下面的client.php来测试,可以多次发送输入的信息到服务端,来交互。

 

 

client.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
 $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
 //socket_connect($socket,'127.0.0.1',6666);
 //socket_connect($socket,'124.156.165.37',6666);
 socket_connect($socket,'192.168.123.41',8000);
while(1) {
 echo "input:---";
 $line = fread(STDIN, 1024);
 echo $line;
 //$msg = "hlllo server123\n";
 socket_write($socket,$line);
 $res = socket_read($socket,2048);
 echo $res;
 
 
}

  

 

----------------------------------------------------------------

php的三种CLI常量:STDIN,STDOUT,STDERR

 

  PHP CLI(command line interface)中,有三个系统常量,分别是STDIN、STDOUT、STDERR,代表文件句柄。

 

应用一:

<?php
while($line = fopen('php://stdin','r')){
    echo fgets($line);
}
?>

应用二:

<?php
    echo STDIN;
?>

在dos命令行下直接返回STDIN文件指针(文件句柄)。如图:

应用三:

<?php
    echo fgets(STDIN);
?>

STDIN可以拿到在dos下输入的内容,fgets读取这个STDIN文件句柄,即可打印出刚才输入的内容。如图:

posted @   立志做一个好的程序员  阅读(441)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-05-07 学习makefile

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示