php 实现socket通信
PHP 实现 Socket 通信
创建 Socket 服务器
使用 socket_create 函数创建一个 Socket 资源,指定协议族(如 AF_INET)、Socket 类型(如 SOCK_STREAM)和协议(如 SOL_TCP)。绑定 IP 地址和端口后,调用 socket_listen 开始监听连接请求。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);
接受客户端连接
通过 socket_accept 接受客户端连接,返回一个新的 Socket 资源用于与客户端通信。可以使用 socket_read 读取客户端发送的数据,socket_write 向客户端发送响应。
$clientSocket = socket_accept($socket);
$data = socket_read($clientSocket, 1024);
socket_write($clientSocket, "Hello Client!");
关闭 Socket 连接
通信完成后,使用 socket_close 关闭客户端和服务器的 Socket 连接,释放资源。
socket_close($clientSocket);
socket_close($socket);
创建 Socket 客户端
客户端通过 socket_create 创建 Socket 后,使用 socket_connect 连接到服务器。发送数据使用 socket_write,接收数据使用 socket_read。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, '127.0.0.1', 8080);
socket_write($socket, "Hello Server!");
$response = socket_read($socket, 1024);
socket_close($socket);
错误处理
检查每个 Socket 操作的返回值,使用 socket_last_error 和 socket_strerror 获取错误信息,确保通信的稳定性。
if (socket_last_error()) {
echo "Error: " . socket_strerror(socket_last_error());
}
完整示例代码
服务器端代码:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);
$clientSocket = socket_accept($socket);
$data = socket_read($clientSocket, 1024);
echo "Received: $data\n";
socket_write($clientSocket, "Hello Client!");
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 Server!");
$response = socket_read($socket, 1024);
echo "Response: $response\n";
socket_close($socket);
注意事项
- 确保服务器和客户端的协议、IP 地址和端口一致。
- 处理大容量数据时,循环读取和写入以避免数据截断。
- 考虑使用多线程或非阻塞模式处理多个客户端连接。
通过以上步骤,可以实现基本的 Socket 通信功能,适用于简单的客户端-服务器交互场景。







