当前位置:首页 > PHP

php 实现 tcp

2026-01-29 20:20:48PHP

PHP 实现 TCP 通信的方法

使用 socket 扩展

PHP 的 socket 扩展提供了 TCP 通信的功能。以下是一个简单的 TCP 服务器和客户端的实现示例。

TCP 服务器示例

$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", strlen("Message received"));
    socket_close($client);
}

socket_close($socket);

TCP 客户端示例

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

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

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

socket_close($socket);

使用 stream_socket 函数

PHP 的 stream_socket 函数族也支持 TCP 通信,提供了更高层次的抽象。

TCP 服务器示例

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

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

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

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

fclose($server);

TCP 客户端示例

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

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

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

fclose($client);

使用第三方库

对于更复杂的 TCP 通信需求,可以考虑使用第三方库,如 ReactPHPWorkerman。这些库提供了事件驱动的异步 TCP 通信能力。

ReactPHP 示例

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) {
    $connection->write("Hello from server!\n");
    $connection->on('data', function ($data) use ($connection) {
        echo "Received: $data";
        $connection->write("Message received\n");
    });
});

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

Workerman 示例

php 实现 tcp

require_once 'vendor/autoload.php';

use Workerman\Worker;

$worker = new Worker('tcp://127.0.0.1:12345');
$worker->onConnect = function($connection) {
    echo "New connection\n";
};
$worker->onMessage = function($connection, $data) {
    echo "Received: $data\n";
    $connection->send("Message received\n");
};
$worker->onClose = function($connection) {
    echo "Connection closed\n";
};

Worker::runAll();

注意事项

  • 确保 PHP 已安装 socket 扩展,可通过 php -m | grep socket 检查。
  • 防火墙设置可能阻止 TCP 通信,确保端口已开放。
  • 异步 TCP 通信需要额外的库支持,如 ReactPHPWorkerman

以上方法提供了不同层次的 TCP 通信实现,可根据具体需求选择适合的方式。

标签: phptcp
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php如何实现直播

php如何实现直播

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

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…