在PHP中,socket编程是一种底层网络通信方式,适用于构建自定义的服务端程序。本文将介绍如何使用socket_accept()函数接受客户端连接,并通过socket_write()函数向客户端发送响应。
首先,我们需要创建一个socket资源,并绑定到指定的IP地址和端口上,以便监听客户端请求。
<?php
// 创建一个TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() 失败: " . socket_strerror(socket_last_error()) . "\n");
}
// 绑定IP和端口,假设绑定本地IP和端口8080
$bind = socket_bind($socket, "0.0.0.0", 8080);
if ($bind === false) {
die("socket_bind() 失败: " . socket_strerror(socket_last_error($socket)) . "\n");
}
绑定成功后,我们调用socket_listen()开始监听,然后使用socket_accept()阻塞等待客户端连接。
// 开始监听,允许最多5个连接排队
socket_listen($socket, 5);
echo "服务器启动,等待客户端连接...\n";
while (true) {
// 阻塞等待客户端连接
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() 失败: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
echo "客户端已连接\n";
接收到客户端连接后,可以通过socket_read()读取客户端数据,并用socket_write()向客户端发送响应。例如,发送一条简单的欢迎消息。
// 读取客户端数据,最多读取1024字节
$input = socket_read($clientSocket, 1024);
echo "收到客户端消息: $input\n";
// 发送响应数据
$response = "欢迎访问m66.net服务器!\n";
socket_write($clientSocket, $response, strlen($response));
// 关闭客户端连接
socket_close($clientSocket);
}
当服务器需要关闭时,调用socket_close()释放资源。
socket_close($socket);
以上代码展示了一个简单的基于PHP socket的服务器示例,重点在于:
使用socket_create()创建socket;
使用socket_bind()绑定IP和端口;
使用socket_listen()开始监听;
使用socket_accept()阻塞等待客户端连接;
使用socket_write()向客户端发送数据响应。
这样,你就可以通过PHP原生socket编程,搭建起基本的TCP服务端,灵活处理客户端连接与通信。