php案例 TCP服务器协议
解决方法:启用 Telnet 客户端
打开“控制面板” → “程序” → “启用或关闭Windows功能”
找到“Telnet客户端”,勾选它,点击“确定”
等待安装完成后,重新打开命令提示符(CMD),输入 telnet,如果出现提示说明已安装
第一步
D:>D:phpstudy_proExtensionsphpphp7.4.3ntsphp.exe D:phpstudy_proWWW.php(然后不要关闭)
第二步:
另外在开启cmd
telnet 127.0.0.1 12345
1.php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 12345);
socket_listen($socket);
while ($conn = socket_accept($socket)) {
socket_write($conn, "Hello TCP Client!
");
socket_close($conn);
}
socket_close($socket);
?>
解释:
逐行解释
socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
创建一个基于 IPv4(AF_INET)、流式(SOCK_STREAM)、TCP 协议(SOL_TCP)的 socket。
socket_bind(
s
o
c
k
e
t
,
′
0.0.0.0
′
,
12345
)
;
把
s
o
c
k
e
t
绑定到本地所有
I
P
的
12345
端口上。这样,任何访问本机
12345
端口的
T
C
P
连接都能被这个
s
o
c
k
e
t
接收。
s
o
c
k
e
t
l
i
s
t
e
n
(
socket, '0.0.0.0', 12345); 把 socket 绑定到本地所有 IP 的 12345 端口上。 这样,任何访问本机 12345 端口的 TCP 连接都能被这个 socket 接收。 socket_listen(
socket,′0.0.0.0′,12345);把socket绑定到本地所有IP的12345端口上。这样,任何访问本机12345端口的TCP连接都能被这个socket接收。socketlisten(socket);
让 socket 进入监听状态,准备接受客户端的连接。
while (
c
o
n
n
=
s
o
c
k
e
t
a
c
c
e
p
t
(
conn = socket_accept(
conn=socketaccept(socket)) { … }
进入一个死循环,不断等待客户端连接。
每当有客户端连接时,socket_accept 会返回一个新的连接资源
c
o
n
n
。
s
o
c
k
e
t
w
r
i
t
e
(
conn。 socket_write(
conn。socketwrite(conn, “Hello TCP Client!
”);
向刚刚连接进来的客户端发送一条消息:“Hello TCP Client!”
socket_close(
c
o
n
n
)
;
关闭与当前客户端的连接。
s
o
c
k
e
t
c
l
o
s
e
(
conn); 关闭与当前客户端的连接。 socket_close(
conn);关闭与当前客户端的连接。socketclose(socket);
当循环结束后(一般不会结束),关闭主 socket。
总结
这段代码就是一个TCP服务器,监听 12345 端口。
每当有客户端(比如用 telnet、nc 等工具)连接到这个端口时,服务器会回复一条“Hello TCP Client!”消息,然后断开连接。
适合用来学习 socket 编程的基本原理。
什么是TCP?
- TCP 是什么?
TCP 是一种网络通信协议,属于互联网协议族(TCP/IP协议族)中的核心协议之一。
它主要用于两台计算机之间可靠地传输数据,比如你访问网页、收发邮件、文件传输等,底层都是用 TCP。 - TCP 的主要特点
面向连接
在通信前,必须先建立连接(三次握手),通信结束后要断开连接(四次挥手)。
可靠传输
数据传输有确认机制、重发机制、顺序控制,保证数据不会丢失、不会乱序。
面向字节流
数据以字节流的方式传输,没有消息边界,应用层需要自己划分消息。
全双工通信
双方可以同时发送和接收数据。 - TCP 的应用场景
网页浏览(HTTP/HTTPS 协议底层用 TCP)
文件传输(FTP 协议底层用 TCP)
远程登录(SSH、Telnet)
电子邮件(SMTP、POP3、IMAP) - TCP 与 UDP 的区别
| 特点 | TCP | UDP |
|--------------|---------------------------|--------------------------|
| 是否连接 | 有连接(三次握手) | 无连接 |
| 是否可靠 | 可靠,保证顺序和完整性 | 不可靠,可能丢包、乱序 |
| 速度 | 较慢 | 较快 |
| 应用场景 | 网页、文件、邮件等 | 视频、语音、直播、游戏等 | - 形象理解
你可以把 TCP 想象成打电话:
先拨号(建立连接),对方接听后才能说话(数据传输),说完挂电话(断开连接),每句话都能确认对方听到了。
而 UDP 像发短信:
直接发,不管对方收没收到,也不保证顺序。