### PHP5 实现 Socket 通信知识点详解 #### 一、Socket 概述 在计算机网络中,Socket(套接字)是一种用于网络间进程通信的机制。它为应用程序提供了访问低层传输协议的能力,比如 TCP 和 UDP。在 PHP5 中,Socket 的功能是通过内置的 `socket` 扩展来实现的。 #### 二、Socket 创建与绑定 1. **创建 Socket:** ```php $commonProtocol = getprotobyname("tcp"); $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); ``` - `getprotobyname("tcp")` 获取协议名称对应的协议编号。 - `socket_create(AF_INET, SOCK_STREAM, $commonProtocol)` 创建一个基于 IPv4 和 TCP 协议的 Socket。其中: - `AF_INET` 表示使用 IPv4 地址族。 - `SOCK_STREAM` 表示使用流式套接字,即 TCP。 - `$commonProtocol` 即前面获取的 TCP 协议编号。 2. **绑定 Socket:** ```php socket_bind($socket, '192.168.1.99', 8090); ``` - `socket_bind($socket, '192.168.1.99', 8090)` 将 Socket 绑定到 IP 地址 `192.168.1.99` 和端口 `8090` 上。 3. **监听 Socket:** ```php socket_listen($socket); ``` - `socket_listen($socket)` 开始监听绑定的地址和端口,等待客户端连接。 #### 三、服务器端接收连接与数据处理 1. **接受客户端连接:** ```php $connection = socket_accept($socket); printf("Socket connected\r\n"); ``` - `socket_accept($socket)` 接受客户端的连接请求,并返回一个新的 Socket 连接句柄 `$connection`。 2. **发送数据:** ```php if ($buffer != "") { socket_write($connection, $buffer . "\r\n"); } else { printf("No Data in the buffer\r\n"); } ``` - `socket_write($connection, $buffer . "\r\n")` 向客户端发送数据。 3. **读取数据:** ```php while ($data = socket_read($connection, 1024, PHP_BINARY_READ)) { $buffer = $data; socket_write($connection, "Information Received\r\n"); printf("Buffer: %s\r\n", $buffer); } ``` - `socket_read($connection, 1024, PHP_BINARY_READ)` 从客户端读取最多 1024 字节的数据。 - `PHP_BINARY_READ` 指定读取模式为二进制。 4. **关闭连接:** ```php socket_close($connection); printf("Closed the socket\r\n\r\n"); ``` - `socket_close($connection)` 关闭与客户端的连接。 #### 四、客户端建立连接与数据交互 1. **创建客户端 Socket:** ```php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); ``` - `SOL_TCP` 表示使用 TCP 协议,等同于 `getprotobyname("tcp")`。 2. **连接服务器:** ```php $connection = socket_connect($socket, '192.168.1.99', 8090); ``` - `socket_connect($socket, '192.168.1.99', 8090)` 连接到服务器的指定 IP 地址和端口。 3. **读取服务器响应:** ```php while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) { if ($buffer == "IAMSERVER!") { break; } else { echo("<p>Buffer Data: $buffer</p>"); } } ``` - `PHP_NORMAL_READ` 表示读取模式为文本。 4. **向服务器发送数据:** ```php echo("<p>Writing to Socket</p>"); if (!socket_write($socket, "IAMCLIENT!\r\n")) { echo("<p>Write failed</p>"); } ``` 5. **接收服务器响应:** ```php while ($buffer = socket_read($socket, 1024, PHP_BINARY_READ)) { echo("<p>Response was: $buffer</p>"); } ``` #### 五、总结 以上介绍了如何使用 PHP5 实现基于 TCP 协议的 Socket 通信。包括服务器端和客户端的创建、连接、数据交互以及关闭等过程。通过这些基础的步骤,可以构建简单的网络应用或进行进一步的功能扩展。
<?php
// Set up our socket
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, '192.168.1.99', 8090);
socket_listen($socket);
$buffer = "I AM SERVER!";
while(true)
{
$connection = socket_accept($socket);
printf("Socket connected\r\n");
if($buffer != "")
{
socket_write($connection, $buffer . "\r\n");
}
else
{
printf("No Data in the buffer\r\n");
}
while($data = socket_read($connection, 1024, PHP_BINARY_READ))
{
$buffer = $data;
- zhang_xiaoqian2012-03-27其实我想要的不是php之间的通信,而是php与c语言之间的通信,不过还是谢谢分享。
- jieying_li2014-01-08我学习php参考了,容易看懂,帮助学习,谢谢分享
- u0117679532014-06-07很好的资料,对我帮组挺大谢谢
- 粉丝: 8
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助