当前位置:首页 > PHP

php实现tcp

2026-02-14 11:04:06PHP

PHP 实现 TCP 通信

使用 stream_socket_server 创建 TCP 服务器

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

php实现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 客户端实现,连接到服务器并发送数据:

php实现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 服务器:

$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 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…