当前位置:首页 > PHP

php实现tcp

2026-01-29 12:58:33PHP

PHP 实现 TCP 通信

PHP 可以通过 socket 扩展实现 TCP 通信,包括客户端和服务端的开发。以下是具体实现方法。

TCP 服务端实现

创建一个 TCP 服务端需要监听指定端口并处理客户端连接:

php实现tcp

<?php
// 创建 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()));
}

// 绑定 IP 和端口
$bind = socket_bind($socket, '0.0.0.0', 8080);
if ($bind === false) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error()));
}

// 开始监听
$listen = socket_listen($socket, 5);
if ($listen === false) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error()));
}

echo "Server started on port 8080\n";

// 接受客户端连接
while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error());
        continue;
    }

    // 读取客户端数据
    $input = socket_read($client, 1024);
    echo "Received: " . $input . "\n";

    // 发送响应
    $output = "Hello Client!";
    socket_write($client, $output, strlen($output));

    // 关闭客户端连接
    socket_close($client);
}

// 关闭服务端 socket
socket_close($socket);
?>

TCP 客户端实现

创建一个 TCP 客户端用于连接服务端并发送数据:

<?php
// 创建 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()));
}

// 连接服务端
$connect = socket_connect($socket, '127.0.0.1', 8080);
if ($connect === false) {
    die("socket_connect() failed: " . socket_strerror(socket_last_error()));
}

// 发送数据
$message = "Hello Server!";
socket_write($socket, $message, strlen($message));

// 接收响应
$response = socket_read($socket, 1024);
echo "Server response: " . $response . "\n";

// 关闭 socket
socket_close($socket);
?>

使用 stream_socket 实现

除了 socket 扩展,还可以使用 stream_socket 函数实现 TCP 通信:

php实现tcp

服务端示例:

<?php
$server = stream_socket_server("tcp://0.0.0.0:8080", $errno, $errstr);
if (!$server) {
    die("$errstr ($errno)");
}

echo "Server started on port 8080\n";

while ($client = stream_socket_accept($server)) {
    $input = fread($client, 1024);
    echo "Received: " . $input . "\n";

    $output = "Hello Client!";
    fwrite($client, $output);

    fclose($client);
}

fclose($server);
?>

客户端示例:

<?php
$client = stream_socket_client("tcp://127.0.0.1:8080", $errno, $errstr);
if (!$client) {
    die("$errstr ($errno)");
}

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

fclose($client);
?>

注意事项

  • 确保 PHP 已启用 socket 扩展(检查 php.iniextension=sockets 是否取消注释)。
  • 服务端和客户端的 IP 和端口需一致。
  • 处理异常情况,如连接失败或读写错误。
  • 多客户端并发时,服务端需使用多线程或非阻塞模式(如 socket_set_nonblock)。

通过以上方法,可以轻松实现 PHP 的 TCP 通信功能。

标签: phptcp
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 实现 java md5加密

php 实现 java md5加密

PHP 实现 Java MD5 加密 Java 和 PHP 的 MD5 加密结果可能存在差异,主要由于字符编码和输出格式的不同。以下是确保 PHP 与 Java MD5 加密结果一致的方法。 确保字…

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…

php 实现文档预览

php 实现文档预览

PHP 实现文档预览的方法 在 PHP 中实现文档预览功能通常涉及将文档转换为可预览的格式(如 PDF、HTML 或图片)。以下是几种常见的方法: 使用第三方库转换文档为 PDF 通过调用外部库或工…