当前位置:首页 > PHP

php实现tcp

2026-02-14 11:04:06PHP

PHP 实现 TCP 通信

使用 stream_socket_server 创建 TCP 服务器

以下是一个简单的 TCP 服务器实现,监听本地端口并接收客户端连接:

$host = '127.0.0.1';
$port = 12345;

// 创建 TCP 服务器
$server = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$server) {
    die("Error: $errstr ($errno)");
}

echo "Server listening on $host:$port\n";

while (true) {
    // 接受客户端连接
    $client = stream_socket_accept($server);
    if ($client) {
        // 读取客户端数据
        $data = fread($client, 1024);
        echo "Received: $data\n";

        // 发送响应
        fwrite($client, "Hello from server!\n");

        // 关闭连接
        fclose($client);
    }
}

使用 fsockopen 创建 TCP 客户端

以下是一个简单的 TCP 客户端实现,连接到服务器并发送数据:

$host = '127.0.0.1';
$port = 12345;

// 创建 TCP 连接
$client = fsockopen($host, $port, $errno, $errstr, 30);
if (!$client) {
    die("Error: $errstr ($errno)");
}

// 发送数据
fwrite($client, "Hello from client!\n");

// 接收响应
$response = fread($client, 1024);
echo "Server response: $response\n";

// 关闭连接
fclose($client);

使用 socket_* 函数实现更底层的 TCP 通信

如果需要更底层的控制,可以使用 PHP 的 socket_* 函数:

// 创建服务器
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '127.0.0.1', 12345);
socket_listen($socket);

echo "Server listening on 127.0.0.1:12345\n";

while (true) {
    $client = socket_accept($socket);
    $data = socket_read($client, 1024);
    echo "Received: $data\n";

    socket_write($client, "Hello from server!\n");
    socket_close($client);
}

异步 TCP 服务器实现

使用 stream_select 实现异步 TCP 服务器:

php实现tcp

$host = '127.0.0.1';
$port = 12345;

$server = stream_socket_server("tcp://$host:$port");
$clients = [$server];

while (true) {
    $read = $clients;
    $write = $except = null;

    if (stream_select($read, $write, $except, 0)) {
        foreach ($read as $socket) {
            if ($socket === $server) {
                $client = stream_socket_accept($server);
                $clients[] = $client;
                echo "New client connected\n";
            } else {
                $data = fread($socket, 1024);
                if ($data === false || $data === '') {
                    fclose($socket);
                    unset($clients[array_search($socket, $clients)]);
                    echo "Client disconnected\n";
                } else {
                    echo "Received: $data\n";
                    fwrite($socket, "Echo: $data\n");
                }
            }
        }
    }
}

注意事项

  • PHP 的 TCP 实现通常用于简单的网络通信,不适合高并发场景
  • 生产环境建议使用专门的服务器软件如 Nginx 或 Apache 处理 TCP 连接
  • 长时间运行的 PHP 脚本需要注意内存泄漏问题
  • 需要考虑错误处理和连接超时等边界情况

标签: phptcp
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…