php实现socket
PHP 实现 Socket 通信的方法
PHP 提供了 socket 扩展来实现基于 TCP/UDP 的 Socket 通信。以下是两种常见的 Socket 实现方式:
创建 TCP Socket 服务器
-
创建 Socket 使用
socket_create()函数创建一个 Socket 资源,指定协议族、Socket 类型和协议类型:$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { die("Socket 创建失败: " . socket_strerror(socket_last_error())); } -
绑定地址和端口 使用
socket_bind()将 Socket 绑定到指定的 IP 地址和端口:$ip = '127.0.0.1'; $port = 8080; if (!socket_bind($socket, $ip, $port)) { die("绑定失败: " . socket_strerror(socket_last_error())); } -
监听连接 调用
socket_listen()开始监听连接请求:if (!socket_listen($socket, 5)) { die("监听失败: " . socket_strerror(socket_last_error())); } -
接受客户端连接 使用
socket_accept()接受客户端连接,并返回一个新的 Socket 资源用于通信:$clientSocket = socket_accept($socket); if ($clientSocket === false) { die("接受连接失败: " . socket_strerror(socket_last_error())); } -
读写数据 通过
socket_read()和socket_write()进行数据收发:
$data = socket_read($clientSocket, 1024); echo "收到数据: $data"; socket_write($clientSocket, "Hello Client!", strlen("Hello Client!")); -
关闭 Socket 通信完成后关闭 Socket:
socket_close($clientSocket); socket_close($socket);
创建 TCP Socket 客户端
-
创建 Socket 与服务器类似,先创建一个 Socket:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); -
连接服务器 使用
socket_connect()连接到服务器:$ip = '127.0.0.1'; $port = 8080; if (!socket_connect($socket, $ip, $port)) { die("连接失败: " . socket_strerror(socket_last_error())); } -
读写数据 发送数据并接收响应:

socket_write($socket, "Hello Server!", strlen("Hello Server!")); $response = socket_read($socket, 1024); echo "服务器响应: $response"; -
关闭 Socket
socket_close($socket);
注意事项
- 错误处理:每一步操作后都应检查返回值,并使用
socket_last_error()和socket_strerror()获取错误信息。 - 超时设置:可以通过
socket_set_option()设置超时参数,避免阻塞。 - UDP Socket:若需实现 UDP 通信,将
SOCK_STREAM改为SOCK_DGRAM,并省略监听和连接步骤,直接使用socket_sendto()和socket_recvfrom()。
示例代码整合
以下是完整的 TCP 服务器和客户端示例:
服务器端代码
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '127.0.0.1', 8080);
socket_listen($socket, 5);
$clientSocket = socket_accept($socket);
$data = socket_read($clientSocket, 1024);
echo "收到: $data";
socket_write($clientSocket, "ACK: $data", strlen("ACK: $data"));
socket_close($clientSocket);
socket_close($socket);
客户端代码
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, '127.0.0.1', 8080);
socket_write($socket, "Hello", 5);
$response = socket_read($socket, 1024);
echo "响应: $response";
socket_close($socket);
通过以上方法,可以快速实现 PHP 的 Socket 通信功能。






