君山 发表于 2020-5-9 19:28:28

PHPsocket案例一:socket通信演示

本帖最后由 君山 于 2020-5-9 19:30 编辑

服务器端:

1 <?php
2 //确保在连接客户端时不会超时
3 set_time_limit(0);
4
5 $ip = '127.0.0.1';
6 $port = 1935;
7
8 /*
9+-------------------------------
10*    @socket通信整个过程
11+-------------------------------
12*    @socket_create
13*    @socket_bind
14*    @socket_listen
15*    @socket_accept
16*    @socket_read
17*    @socket_write
18*    @socket_close
19+--------------------------------
20*/
21
22 /*----------------    以下操作都是手册上的    -------------------*/
23 if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
24   echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
25 }
26
27 if(($ret = socket_bind($sock,$ip,$port)) < 0) {
28   echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
29 }
30
31 if(($ret = socket_listen($sock,4)) < 0) {
32   echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
33 }
34
35 $count = 0;
36
37 do {
38   if (($msgsock = socket_accept($sock)) < 0) {
39         echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
40         break;
41   } else {
42         
43         //发到客户端
44         $msg ="测试成功!\n";
45         socket_write($msgsock, $msg, strlen($msg));
46         
47         echo "测试成功了啊\n";
48         $buf = socket_read($msgsock,8192);
49         
50         
51         $talkback = "收到的信息:$buf\n";
52         echo $talkback;
53         
54         if(++$count >= 5){
55             break;
56         };
57         
58   
59   }
60   //echo $buf;
61   socket_close($msgsock);
62
63 } while (true);
64
65 socket_close($sock);
66 ?>


这是socket的服务端代码。然后运行cmd,注意是自己的程序存放路径啊。
没有反映,对现在服务端的程序已经开始运行,端口已经开始监听了。运行netstat -ano可以查看端口情况,我的是1935端口
看,端口已经处于LISTENING状态了。接下来我们只要运行客户端程序即可连接上。上代码

1 <?php
2 error_reporting(E_ALL);
3 set_time_limit(0);
4 echo "<h2>TCP/IP Connection</h2>\n";
5
6 $port = 1935;
7 $ip = "127.0.0.1";
8
9 /*
10+-------------------------------
11*    @socket连接整个过程
12+-------------------------------
13*    @socket_create
14*    @socket_connect
15*    @socket_write
16*    @socket_read
17*    @socket_close
18+--------------------------------
19*/
20
21 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
22 if ($socket < 0) {
23   echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
24 }else {
25   echo "OK.\n";
26 }
27
28 echo "试图连接 '$ip' 端口 '$port'...\n";
29 $result = socket_connect($socket, $ip, $port);
30 if ($result < 0) {
31   echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
32 }else {
33   echo "连接OK\n";
34 }
35
36 $in = "Ho\r\n";
37 $in .= "first blood\r\n";
38 $out = '';
39
40 if(!socket_write($socket, $in, strlen($in))) {
41   echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
42 }else {
43   echo "发送到服务器信息成功!\n";
44   echo "发送的内容为:<font color='red'>$in</font> <br>";
45 }
46
47 while($out = socket_read($socket, 8192)) {
48   echo "接收服务器回传信息成功!\n";
49   echo "接受的内容为:",$out;
50 }
51
52
53 echo "关闭SOCKET...\n";
54 socket_close($socket);
55 echo "关闭OK\n";
56 ?>

至此客户端已经连接上服务端了。

页: [1]
查看完整版本: PHPsocket案例一:socket通信演示