当前位置: 首页 > article >正文

QTcpSocket使用指南与实践

QTcpSocket 深度解析与实践指南

一、QTcpSocket 概述

QTcpSocket是Qt Network模块提供的TCP协议网络通信类,继承自QAbstractSocket,用于实现TCP客户端功能。它与QTcpServer配合使用,支持流式数据传输,提供面向连接的可靠通信。

核心特性:

  • 基于事件驱动的异步IO模型

  • 支持IPv4/IPv6双协议栈

  • 提供SSL/TLS加密支持(需QSslSocket)

  • 跨平台统一接口(Windows/Linux/macOS)

二、基础使用流程

1. 创建Socket对象

QTcpSocket *socket = new QTcpSocket(parent);

2. 连接服务器

socket->connectToHost("127.0.0.1", 8888);

3. 信号处理

关键信号绑定:

// 连接成功
connect(socket, &QTcpSocket::connected, 
        [](){ qDebug() << "Connected!"; });

// 收到数据
connect(socket, &QTcpSocket::readyRead,
        [=](){ handleData(socket); });

// 断开连接
connect(socket, &QTcpSocket::disconnected,
        [](){ qDebug() << "Disconnected!"; });

// 错误处理
connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
        [](QAbstractSocket::SocketError error){
            qDebug() << "Error:" << error;
        });

4. 发送数据

QByteArray data = "Hello Server!";
socket->write(data);
// 确保立即发送
socket->flush(); 

5. 接收数据

推荐处理方式:

void handleData(QTcpSocket* socket) {
    while(socket->bytesAvailable() > 0) {
        QByteArray buffer = socket->readAll();
        processData(buffer);
    }
}

三、完整客户端示例

class TcpClient : public QObject {
    Q_OBJECT
public:
    explicit TcpClient(QObject *parent = nullptr)
        : QObject(parent) {
        socket = new QTcpSocket(this);
        
        connect(socket, &QTcpSocket::connected, [this](){
            qInfo() << "Connected to server";
            socket->write("Client Ready\n");
        });

        connect(socket, &QTcpSocket::readyRead, [this](){
            QByteArray data = socket->readAll();
            qInfo() << "Received:" << data;
        });

        connect(socket, &QTcpSocket::disconnected, [this](){
            qWarning() << "Connection closed";
        });
    }

    void connectToServer(const QString &host, quint16 port) {
        qInfo() << "Connecting to" << host << ":" << port;
        socket->connectToHost(host, port);
    }

private:
    QTcpSocket *socket;
};


http://www.kler.cn/a/571914.html

相关文章:

  • Unity摄像机跟随物体
  • 2025年03月04日Github流行趋势
  • 深入理解 Android MediaCodec 视频编码
  • React进阶之前端业务Hooks库(六)
  • 遗传算法详解及在matlab中的使用
  • SSM记忆旅游网站
  • 基于 RBAC 的前端权限管理实现教程
  • ADB、Appium 和 大模型融合开展移动端自动化测试
  • 路由基础学习
  • 清华团队提出HistoCell,从组织学图像推断超分辨率细胞空间分布助力癌症研究|顶刊精析·25-03-02
  • 自由学习记录(40)
  • 基于微信小程序的停车场管理系统的设计与实现
  • Tomcat:Java Web应用的强大支撑
  • 05 HarmonyOS NEXT高效编程秘籍:Arkts函数调用与声明优化深度解析
  • 复合机器人为 CNC 毛坯件上下料注入 “智能强心针”
  • CentOS 7中安装Dify
  • Docker 容器的数据卷
  • LeetCode 42.接雨水
  • 虚拟机IP的配置,让它上网
  • 奖学金(acwing)c++