当前位置:首页 > 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 通信,提供了更高层次的抽象。

php 实现 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 客户端示例

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

标签: phptcp
分享给朋友:

相关文章

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现上传图片

php实现上传图片

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…