当前位置: 首页> 最新文章列表> socket_accept() + socket_write(): 发送响应到客户端

socket_accept() + socket_write(): 发送响应到客户端

M66 2025-05-20

在PHP中,socket编程是一种底层网络通信方式,适用于构建自定义的服务端程序。本文将介绍如何使用socket_accept()函数接受客户端连接,并通过socket_write()函数向客户端发送响应。

1. 创建socket并绑定端口

首先,我们需要创建一个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");
}

2. 监听并接受连接

绑定成功后,我们调用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";

3. 读取客户端请求并发送响应

接收到客户端连接后,可以通过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);
}

4. 关闭服务端socket

当服务器需要关闭时,调用socket_close()释放资源。

socket_close($socket);

总结

以上代码展示了一个简单的基于PHP socket的服务器示例,重点在于:

这样,你就可以通过PHP原生socket编程,搭建起基本的TCP服务端,灵活处理客户端连接与通信。