php套接字编程
1。实验预习:tcp协议
TCP协议的创建:
创建流程:1。客户端主动调用连接发送SYN分节;2。服务器端必须回复一个ACK分节来确认客户端的SYN分节,并发送一个SYN分节给客户端;3。客户端对服务器端发送SYN分节进行ACK分节的确认
TCP协议的拆除(TCP为全双工的传输协议,所以需要4次分节的交换):
拆除流程:1。首先申请拆除的一端调用接近发送一个鳍分节;2。另一端接收到鳍分节时,发送一个ACK分节进行确认;3。另一端要申请拆除连接时,也要发送一个鳍分节;4。接收端发送一个ACK分节进行确认
TCP的状态转换图
连接:[1. syn_sent主动打开,SYN分节已发送;2. syn_rcvd被动打开,SYN分节已接收;3.建立已经建立连接)关闭:[1. fin_wait_1发起主动关闭,鳍分节已发送;2. close_wait被动关闭,鳍分节已接收,ACK分节已发送;3. fin_wait_2成功实现半关闭,ACK分节已接收;4. last_ack最终的ACK,鳍分节已发送;5。TIME_WAIT鳍分节已接收,ACK分节已发送;6。关闭ACK分节已接收,成功拆除连接]
插座通信依次会进行插座创建,插座监听,套接字收发,套接字关闭几个阶段。
常用函数1(创建的是插座资源):[socket_create () | socket_bind () | socket_listen () | socket_accept () | socket_write () | socket_read () | socket_close ()]
常用函数2(创建的是流资源):[stream_socket_server() |写入文件()|从文件中读()| fclose ()]
示例server.php(并发量只有1);
<代码>,php lt; ? SOCK_STREAM套接字=socket_create美元(AF_INET, SOL_TCP); socket_bind(美元的袜子,127.0.0.1,8080); socket_listen(袜子); (,) { (康涅狄格州=socket_accept美元袜子); $ output_buffer=癏TTP/1.0 200 OK \ r \ nServer:这是我的服务器\ r \ nContent-Type: text/html; charset: utf - 8 \ r \服装是我的第一套接字程序”; socket_write(康涅狄格州,output_buffer美元); 康涅狄格州socket_close ($); }代码>或
<代码>,php lt; ? 美元的袜子=stream_socket_server (tcp://127.0.0.1:8080”errno美元,美元errstr); (,) { (康涅狄格州=stream_socket_accept美元袜子); $ output_buffer=癏TTP/1.0 200 OK \ r \ nServer:这是我的服务器\ r \ nContent-Type: text/html; charset: utf - 8 \ r \服装是我的第一套接字程序”; 写入文件(康涅狄格州,write_buffer美元); 康涅狄格州fclose(美元); }代码>控制台运行
<代码> sudo php-fpm7.2开始,,php sertver.php 代码>运行成功之后,打开浏览器输入“127.0.0.1:8080”
引用>3。多进程编程
多进程简介:就是多个进程同时工作,这样的进程一般属于亲属关系,通常由一个父进程叉得到的。注意这里所说的同时工作,是宏观上的,同一时刻在单个单核CPU上
示例multiProcess.php
<代码>,php lt; ? $ pid=pcntl_fork (); 如果($ pid) { 回应“这是父进程\ n”; pcntl_waitpid (pid,美元地位); }elseif ($ pid==0) { 回应“这是子进程\ n”; 其他}{ 死亡(“叉faild \ n”); }代码>运行php multiProcess.php <代码> 代码>
函数介绍:
php套接字编程