当前位置:首页 > 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 示例

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 通信实现,可根据具体需求选择适合的方式。

php 实现 tcp

标签: phptcp
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERV…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…