找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 1965|回复: 0

[原生PHP] PHPsocket案例一:socket通信演示

[复制链接]

501

主题

18

回帖

5

广播

论坛版主

积分
258
泰拉
22
水晶
1
铜钥匙
0
银钥匙
0
金钥匙
0

【江湖新秀】【宝剑回鞘】【泰拉达人】【奥运选手】

发表于 2020-5-9 19:28:28 | 显示全部楼层 |阅读模式
本帖最后由 君山 于 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 ?>

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

[发帖际遇]: 君山 在论坛发帖时没有注意,被小偷偷去了 5 泰拉. 幸运榜 / 衰神榜
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-5-20 15:47 , Processed in 0.108031 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表