当前位置:首页 > PHP

php 实现 tcp

2026-03-12 16:41:59PHP

PHP 实现 TCP 通信的方法

PHP 可以通过多种方式实现 TCP 通信,以下是常见的几种方法:

使用 socket 扩展

PHP 内置的 socket 扩展可以创建 TCP 服务器和客户端。以下是一个简单的 TCP 服务器和客户端示例:

TCP 服务器端代码

<?php
$host = '127.0.0.1';
$port = 12345;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

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

while (true) {
    $client = socket_accept($socket);
    $message = socket_read($client, 1024);
    echo "Received: $message\n";
    socket_write($client, "Message received");
    socket_close($client);
}

socket_close($socket);
?>

TCP 客户端代码

<?php
$host = '127.0.0.1';
$port = 12345;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);

socket_write($socket, "Hello Server");
$response = socket_read($socket, 1024);
echo "Server response: $response\n";

socket_close($socket);
?>

使用 stream_socket 函数

PHP 的流函数也支持 TCP 通信,以下是使用流函数的示例:

TCP 服务器端

<?php
$host = '127.0.0.1';
$port = 12345;

$server = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$server) {
    die("$errstr ($errno)");
}

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

while ($conn = stream_socket_accept($server)) {
    $data = fread($conn, 1024);
    echo "Received: $data\n";
    fwrite($conn, "Message received");
    fclose($conn);
}

fclose($server);
?>

TCP 客户端

<?php
$host = '127.0.0.1';
$port = 12345;

$fp = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);
if (!$fp) {
    die("$errstr ($errno)");
}

fwrite($fp, "Hello Server");
$response = fread($fp, 1024);
echo "Server response: $response\n";

fclose($fp);
?>

使用 ReactPHP 库

对于更复杂的 TCP 应用,可以使用 ReactPHP 库,它提供了事件驱动的编程模型:

安装 ReactPHP

composer require react/socket

TCP 服务器示例

<?php
require 'vendor/autoload.php';

$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server('127.0.0.1:12345', $loop);

$socket->on('connection', function (React\Socket\ConnectionInterface $connection) {
    echo "New connection\n";

    $connection->on('data', function ($data) use ($connection) {
        echo "Received: $data\n";
        $connection->write("Message received");
    });

    $connection->on('close', function () {
        echo "Connection closed\n";
    });
});

echo "Server listening on 127.0.0.1:12345\n";
$loop->run();
?>

TCP 客户端示例

php 实现 tcp

<?php
require 'vendor/autoload.php';

$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);

$connector->connect('127.0.0.1:12345')->then(function (React\Socket\ConnectionInterface $connection) {
    $connection->write("Hello Server");

    $connection->on('data', function ($data) {
        echo "Server response: $data\n";
    });
});

$loop->run();
?>

注意事项

  • 确保 PHP 安装时启用了 socket 扩展(通常在 php.ini 中取消注释 extension=sockets
  • 防火墙设置可能需要调整以允许 TCP 连接
  • 对于生产环境,需要考虑错误处理、超时设置和并发连接管理
  • 长时间运行的服务器脚本需要使用 set_time_limit(0) 或类似方法避免超时

以上方法提供了从基础到高级的 TCP 通信实现方式,可根据项目需求选择合适的方案。

标签: phptcp
分享给朋友:

相关文章

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现登录

php实现登录

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

php实现上传图片

php实现上传图片

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

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…