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

Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程

Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程

服务端

  • 监听地址和端口
    ip可以是Ipv4Any,本机地址,也可以是固定的某个ip
    端口号则作为服务端绑定的端口,客户端连接服务端时需要连接到服务端绑定的端口,端口不对连接失败

    m_server=new QTcpServer(this);
    m_server->listen(QHostAddress::AnyIPv4,serverPort);
    
  • 监听连接
    监听连接信号,当有新连接到来时会触发,可以通过nextPendingConnection()接口获取新连接来的QTcpSocket,后续通过此QTcpSocket和对应的客户端收发消息

    connect(m_server,&QTcpServer::newConnection,[this](){if(m_server->hasPendingConnections()){m_socket=m_server->nextPendingConnection();}
    });
    
  • 读写数据

    connect(m_socket,&QTcpSocket::readyRead,[this](){auto data=m_socket->readAll();});
    m_socket->write(data);//发送数据
    m_socket->flush();//可以使数据立即发送出去,无需等其他方面的调度
    

客户端

  • 连接服务端

    auto socket=new QTcpSocket(this);
    socket->connectToHost(serverIp,serverPort);
    if (socket->waitForConnected(3000)) { // 最多等待 3 秒qDebug() << "Connected to server!";
    } else {qWarning() << "Connection failed:" << socket->errorString();
    }
    
  • 读写数据用法同上

    connect(m_socket,&QTcpSocket::readyRead,[this](){auto data=m_socket->readAll();});
    m_socket->write(data);//发送数据
    m_socket->flush();//可以使数据立即发送出去,无需等其他方面的调度
    

注意点

QTcpSocket发送的数据如果不及时读取的话,数据会堆叠在一起,下次接收时可能读取的是多次发送的数据,因此需要注意设置一些分割标识,便于堆叠数据的拆分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/260004.html

相关文章:

  • 智能客服三大模型解析:扩展问数量如何因架构差异撬动90%匹配率?
  • CentOS下Nginx服务器搭建全攻略
  • kotlin中::class.java的意义
  • 简单使用python
  • 【零基础学AI】第5讲:Pandas数据处理
  • CSMA/CD相关习题---谢希仁课后题
  • 【redis使用场景——缓存——数据过期策略 】
  • 国外开源客服系统chathoot部署,使用教程
  • Python实例题:基于 Flask 的博客系统
  • 人工智能编程三大核心流程详解--机器学习、神经网络、NLP自然语言处理
  • K8s: Kubernetes
  • 权威认证!华宇TAS应用中间件荣获CCRC“中间件产品安全认证”
  • Beam2.61.0版本消费kafka重复问题排查
  • SQL SERVER存储过程
  • SQL重置自增
  • Solidity学习 - 认识Solidity合约结构
  • Windows命令连接符的安全风险分析与防御策略
  • [附源码+数据库+毕业论文+开题报告]基于Spring+MyBatis+MySQL+Maven+jsp实现的宠物领养管理系统,推荐!
  • 无人机关键算法分析 ( MPU6050 ,PID,滤波,四元数,欧拉角,IMU 姿态解算)
  • vue3中使用vue-grid-layout来实现可拖动的仪表盘面板
  • 深度学习在智能物流中的创新应用与未来趋势
  • 在统信UOS(Linux)中构建SQLite3桌面应用笔记
  • C++之string类的实现代码及其详解(上)
  • 0 数学习题本
  • 【stm32】HAL库开发——Cube配置基本定时器
  • Llama 3 + Qwen2双模型实战:单张3090构建企业级多模态知识库(2025精解版)
  • 关于 ARM64 汇编:调用流程与栈帧结构解析
  • Jenkins与Kubernetes深度整合实践
  • GitLab 18.1 高级 SAST 已支持 PHP,可升级体验!
  • OSPF 路由协议详细笔记