1. 简介
Socket被用于进程间通讯。进程间通讯一般基于客户端—服务器模型。在我们这个案例中,客户端—服务器是彼此交互的两个程序。客户端和服务器之间的交互需要一个连接。Socket编程就负责建立这一连接。
最后,我们将会学习如何用PHP创建简单的客户端—服务器程序。我们也将学习如何用客户端程序向服务器端发送和接收信息。
2. 使用代码
目标:开发一个客户端发送字符串信息到服务器同时服务器发送相同字符串的反转字符串给客户端。
PHP Server
Step.1 设置变量主机“Host"和端口”Port"
$host = "127.0.0.1";
$port = 5353;
// No Timeout
set_time_limit(0);
端口号port可以是1024 -65535之间的任意整数。
Step2. 创建Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
Step3. 将socket绑定到端口和主机
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
这里step2创建的socket被绑定到IP地址和端口。
Step4. 启动监听socket
绑定了IP地址和端口之后,服务器等待客户端连接,一直处于等待。
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
Step 5: 接受进来的连接
这个函数接受进来的连接请求并且创建socket。在接受了客户端的连接之后,这个函数返回了另外一个socket来实际负责与相应客户端socket的通讯。下面代码中的“$spawn"就是负责与客户端socket通讯的服务器端socket.
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n")
到目前为止,我们已经准备好了服务器但是目前的代码实际上什么也做不了。回顾我们之前说过的目标,我们将要从客户端socket读取字符串并将字符串反转然后返回给客户端socket.
Step6: 从客户端接收字符串
$input = socket_read($spawn, 1024) or die("Could not read input\n");
Step7: 反转字符串
$output = strrev($input) . "\n";
Step 8: 把字符串发送给客户端socket
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
Step9 : 关闭服务器端Socket
socket_close($spawn);
socket_close($socket);