查看内容

编程过程详解

  • 2020-03-24 05:24
  • Web前端技术
  • Views

本文由码农网 – 小峰原创翻译,转发请看清文末的转发供给,迎接参与我们的付费投稿安顿

介绍

Socket用于进程间通讯。进度间通讯平日依据客商端—服务端模型。当时,顾客端—服务端是能够大同小异的应用程序。客商端和服务端之间的相互必要一连。Socket编制程序担任的正是为应用程序之间构建可进行互相的连续几日。

在本文中,大家将学习如何用PHP创立三个回顾的客户端—服务端。大家还将学习怎么样客商端应用程序怎么样发送音讯到服务端,以至哪些从服务端选择音信。

图片 1

选择代码

指标:开荒三个客户端用于发送string音讯到服务端,服务端将相近的新闻反转后赶回给客商端。

PHP服务器

第1步:设置变量,如“主机”和“端口”

$host = "127.0.0.1";
$port = 5353;
// No Timeout 
set_time_limit(0);

端口号能够是1024 -65535之间的此外正整数。

第2步:创建socket

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socketn");

第3步:绑定socket到端口和主机

创办的socket财富绑定到IP地址和端口号。

$result = socket_bind($socket, $host, $port) or die("Could not bind to socketn");

第4步:启动socket监听

在绑定到IP和端口后,服务端开头等候顾客端的接连。在还未有连接此前它就一向等下去。

$result = socket_listen($socket, 3) or die("Could not set up socket listenern");

第5步:选用连接

本条函数会接收所建的socket传入的连接要求。在接纳来自顾客端socket的三回九转后,该函数重返另三个socket财富,实际上正是承当与相应的客户端socket通讯。这里的“$spawn”就是肩负与客商端socket通讯的socket财富。

$spawn = socket_accept($socket) or die("Could not accept incoming connectionn");

到几天前得了,大家曾经计划好了服务端socket ,但实在此个剧本并从未做其余工作。所认为了继续形成上述目的,大家将读取顾客端socket新闻,然后将吸收接纳到的音信反转后发回给顾客端socket。

第6步:从客商端socket读取新闻

$input = socket_read($spawn, 1024) or die("Could not read inputn");

第7步:反转信息

$output = strrev($input) . "n";

第8步:发送新闻给顾客端socket

socket_write($spawn, $output, strlen ($output)) or die("Could not write outputn");

关闭socket

socket_close($spawn);
socket_close($socket);

那就做到了服务端。以往,我们学习怎么样成立PHP客商端。

PHP客户端

前八个步骤与服务端相近。

第1步:设置变量,如“主机”和“端口”

$host = "127.0.0.1";
$port = 5353;
// No Timeout 
set_time_limit(0);

注:这里的端口和主机应该和服务端中的定义是同一的。

第2步:创建socket

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socketn");

第3步:连接到服务端

$result = socket_connect($socket, $host, $port) or die("Could not connect toservern");

那时候和服务端差别,顾客端socket不绑定端口和主机。相反,它总是到服务端socket,等待接收来自客商端socket的三番五次。这一步创设了客商端socket到服务端socket的连天。

第4步:写入服务端socket

socket_write($socket, $message, strlen($message)) or die("Could not send data to servern");

在这里步骤中,客商端socket的数码被发送到服务端socket。

第5步:阅读来自服务端的响应

$result = socket_read ($socket, 1024) or die("Could not read server responsen");
echo "Reply From Server  :".$result;

第6步:关闭socket

socket_close($socket);

一体化的代码

服务端(server.php)

// set some variables
$host = "127.0.0.1";
$port = 25003;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socketn");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socketn");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listenern");

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connectionn");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read inputn");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = strrev($input) . "n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write outputn");
// close sockets
socket_close($spawn);
socket_close($socket);

客户端(client.php)

$host    = "127.0.0.1";
$port    = 25003;
$message = "Hello Server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socketn");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to servern");  
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to servern");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server responsen");
echo "Reply From Server  :".$result;
// close socket
socket_close($socket);

建构上述文件(server.php和client.php)后,执行如下操作:

  1. 复制www目录中的那几个文件(要是WAMP),安放于C:wamp。
  2. 开荒Web浏览器,在地方栏中键入localhost 。
  3. 先浏览server.php然后client.php。

许可证

那篇小说,以至任何有关的源代码和文书,是通过The Code Project Open License (CPOL卡塔尔(قطر‎许可的。