php套接字编程

  

php套接字编程

  

1。实验预习:tcp协议

  
  

TCP协议的创建:
创建流程:1。客户端主动调用连接发送SYN分节;2。服务器端必须回复一个ACK分节来确认客户端的SYN分节,并发送一个SYN分节给客户端;3。客户端对服务器端发送SYN分节进行ACK分节的确认
 php套接字编程

  

TCP协议的拆除(TCP为全双工的传输协议,所以需要4次分节的交换):
拆除流程:1。首先申请拆除的一端调用接近发送一个鳍分节;2。另一端接收到鳍分节时,发送一个ACK分节进行确认;3。另一端要申请拆除连接时,也要发送一个鳍分节;4。接收端发送一个ACK分节进行确认
 php套接字编程

  

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分节已接收,成功拆除连接]
 php套接字编程”> </p>
  </引用>
  </引用>
  <h3> 2。套接字编程</h3>
  <blockquote>
  <p>我们可以简单的把套接字理解为一个可以连通网络上不同计算机应用程序之间的管道,把一堆数据从管道的一个端扔进去,则会从管道的B端(同时还可以从C, D, E, F……端冒出来)(套接字的官方解释:在网络编程中最常用的方案便是客户机/服务器(客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时,刻服务程序被“惊醒,并且为客户提供服务,对客户的请求作出适当的反应。<br/> <img src=

  

插座通信依次会进行插座创建,插座监听,套接字收发,套接字关闭几个阶段。

  

常用函数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套接字编程