Qt TCP/UDP通讯封装

2023-05-16

Qt TCP/UDP通讯封装

TCP客户端

class TcpClient :public QTcpSocket
{
    Q_OBJECT
public:
    explicit TcpClient(QObject *parent = nullptr);
    ~TcpClient();
    static TcpClient *Instance();
private:
    static QScopedPointer<TcpClient> self;
    QTcpSocket *tcpClient;
public:
    bool connectTcpServer(const QString ip, int port);
    bool disconnectTcpServer();
    void sendData(const QString &data);
    void sendData(const QByteArray &bytes);
    void sendData(const QJsonObject &jsonobj);
    void sentData(const QJsonArray &jsonarray);
    void sentData(const QImage &image);

signals:
    void readSverDate(const QByteArray &data);
    void serverStart();
    void serverStop();


private slots:
    void readDate();
    void connected();
    void disconnected();

};

TCP服务端

class TcpServer :public QTcpServer
{
    Q_OBJECT
public:
    explicit TcpServer(QObject *parent = nullptr);
    ~TcpServer();
    static TcpServer *Instance();
private:
    //*智能指针,在其生命期结束后会自动删除它所指的对象
    static QScopedPointer<TcpServer> self;
    QTcpServer *tcpServer;
    QList<QTcpSocket *> tcpclients;
    QTcpSocket *currentClient;
public:
    bool startTcpServer(const QHostAddress &sIP, int iPort);
    void stopTcpServer();
    //指定断开
    void stopTcpServer(const QString &ip, int port);
    //指定连接发送数据   c++ 形参不同,形成函数重载
    void sendData(const QString &ip, int port, const QString &data);
    void sendData(const QString &data);
    void sendData(const QString &ip, int port, const QByteArray &bytes);
    void sendData(const QByteArray &bytes);
    void sendData(const QString &ip, int port, const QJsonObject &jsonobj);
    void sendData(const QJsonObject &jsonobj);
    void sendData(const QString &ip, int port, const QJsonArray &jsonarray);
    void sentData(const QJsonArray &jsonarray);
    void sendData(const QString &ip, int port, const QImage &image);
    void sentData(const QImage &image);

signals:
    void receiveData(const QString &ip, int port, const QByteArray &data);
    void clientConnected(const QString &ip, int port);
    void clientDisconnected(const QString &ip, int port);

private slots:

    void doclientConnected();
    void doclientDisconnected();
    void doreceiveData();
};

UDP客户端

class UdpClient :public QUdpSocket
{
    Q_OBJECT
public:
    explicit UdpClient(QObject *parent = nullptr);
    ~UdpClient();
    static UdpClient *Instance();
private:
    QUdpSocket *udpclient;
    static QScopedPointer<UdpClient> self;
public:
    void sendData(const QString &ip, int port, const QString &data);
    void sendData(const QString &ip, int port, const QByteArray &byte);
signals:
    void doreadSverData(const QString &ip, int port, const QByteArray &data);

private slots:
    void readSverData();
};

UDP服务端

class UdpServer :public QUdpSocket
{
   Q_OBJECT
public:
    explicit UdpServer(QObject *parent = nullptr);
    ~UdpServer();
    static UdpServer *Instance();
private:
   QUdpSocket *udpserver;
    static QScopedPointer<UdpServer> self;
public:
   bool startUdpServer(const QString &ip, int port);
   void stopUdpServer();
   void sendData(const QString &ip, int port, const QString &data);
   void sendData(const QString &ip, int port, const QByteArray &byte);

signals:
   void doreadClientData(const QString &ip, int port, const QByteArray &data);

private slots:
   void readClientData();
};
* 1: 四种模式,tcp客户端、tcp服务器、udp客户端、udp服务器
* 2:支持多个客户端连接并发
* 3:支持服务端单播,广播,指定断开,全部断开,断开后提示
* 4: TCP传输 json对象 byte数组  自定义结构体等!~

测试demo:
在这里插入图片描述

在这里插入图片描述

完整源码下载地址:

https://gitee.com/zlozl5566/qt-learning-notes/tree/master/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt TCP/UDP通讯封装 的相关文章

  • 分配 TCP/IP 端口供内部应用程序使用

    我编写了一个由 Windows 服务托管的 WCF 服务 它需要侦听已知的 TCP IP 端口 我可以在什么范围内安全地分配端口供我的组织内使用 该端口将嵌入到服务和使用该服务的客户端的配置文件中 端口 0 1023 是众所周知的端口 由
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 当使用环回地址使用 TCP/IP 套接字进行 IPC 时,常见的网络堆栈是否会跳过将消息帧封装在较低级别的 PDU 中?

    在某些环境 例如 Java 中 很自然地使用 TCP IP 套接字通过 localhost 地址 IPv4 中的 127 0 0 1 或 IPv6 中的 1 在同一主机上的进程之间传递消息 因为Java倾向于不在其API中公开其他IPC机制
  • ADO.NET SQLServer:如何防止关闭的连接持有S-DB锁?

    i Dispose http msdn microsoft com en us library system data sqlclient sqlconnection close aspx一个 SqlConnection 对象 但是当然它并
  • 将 C++ TCP/IP 应用程序从 IPv4 转换为 IPv6。难的?值得这么麻烦吗?

    多年来 我使用 WinSock 为 Windows 开发了少量 C 服务器 客户端应用程序 路由器 Web 邮件 FTP 服务器等 等等 我开始越来越多地考虑创建这些应用程序的 IPv6 版本 当然 同时也保留原始的 IPv4 版本 问题
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 无法从亚马逊Windows实例的公共IP访问node.js服务器

    我正在 Windows 服务器的亚马逊微实例上运行 Node js 服务器 我无法使用亚马逊实例的公共IP访问node js服务器 我可以使用 localhost 12345 从实例访问 node js 服务器 但无法使用实例的公共 IP
  • iPhone 上的 TCP 打洞

    我已经阅读了一些内容 虽然我是 iPhone 网络的新手 但我想知道 TCP 打孔是否可以通过 NAT 连接两台 iPhone 我还阅读了一些有关 uPnP 和发夹的有用内容 但我根本不熟悉这些内容 所以如果有人对这是否可能有任何想法 我的
  • 用 C 语言进行非阻塞 udp 套接字编程:我能得到什么?

    我在理解从非阻塞 UDP 套接字返回什么recv recvfrom 时遇到问题 与 TCP 相比更具体一点 如果我错了 请纠正我 阻塞套接字 TCP 或 UDP 在缓冲区中有一些数据之前不会从 recv 返回 这可以是一定数量的字节 TCP
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 创建 ip 网络数据包 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须使用任何协议手动创建自己的网络
  • ConnectionTimeout 与 SocketTimeout

    我正在使用的库有问题 可能是图书馆的问题 也可能是我用错了 基本上 当我这样做时 超时以毫秒为单位 ignitedHttp setConnectionTimeout 1 v short ignitedHttp setSocketTimeou
  • C# P2P聊天应用程序设计

    我想创建一个不使用显式服务器的简单聊天应用程序 主要要求是用户可以同时与许多朋友聊天 就像在 Skype 等上一样 我在这里指的不是会议聊天 而是多个单独的聊天窗口 目前 我只想要一个 LAN 消息应用程序 但如果设计能够轻松扩展到 Int
  • Jmeter TCP Sampler - 如何重用线程之间的连接?

    我在 JMeter 的 ThreadGroup 下设置了一个 TCP 采样器 数据是从 CSV 文件中选取的 第一行数据用于认证 后续行为实际参数数据 像下面这样的东西 AAAAAAA21 BBBBBBBCCCCCCCDDDDDDD BBB
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个

随机推荐

  • ubuntu下安装多个版本的python

    本身系统安装了python2 7和python3 5 现在由于开发需要 xff0c 还需要安装python3 6 安装步骤如下 xff1a 1 下载 Python 直接在官网下载 Python的源代码 xff0c 解压缩 xff0c 按照
  • stm32标准库文件内容说明

    目录 思维导图 一 stm32f4xx h文件内容说明 1 定义了HSE时钟频率的值 2 定义了启动HSE时钟的超时时间 xff0c HSI时钟频率的值 3 根据不同的芯片定义中断向量表结构体 4 包含一些头文件 5 对一些数据类型进行重命
  • UART协议详解

    UART使用的是 异步 xff0c 串行通信 串行通信是指利用一条传输线将资料一位位地顺序传送 特点是通信线路简单 xff0c 利用简单的线缆就可实现通信 xff0c 降低成本 xff0c 适用于远距离通信 xff0c 但传输速度慢的应用场
  • C++中的.和::和:和-」的区别

    转自 xff1a https blog csdn net liao392781 article details 97931845 在学习C 43 43 的过程中我们经常会用到 和 和 xff1a 和 gt xff0c 在此整理一下这些常用符
  • hpsocket实现HTTP通信功能

    前段时间朋友急需让我帮忙搞定个C 43 43 的http库 xff1f xff1f xff1f xff1f 然后指定了hpsocket这个库 看了一下是国人写了 xff0c 资料在doc还算比较全 xff0c 整理了很多框架的部分也挺详细
  • Mysql 批量修改四种方式效率对比(一)

    文章目录 Mysql 批量修改四种方式效率对比环境信息测试数据pom 依赖数据库初始化测试数据 批量修改方案第一种 for第二种 case when第三种 replace into第四种 ON DUPLICATE KEY UPDATE 测试
  • idea插件-SonarLint(六)

    文章目录 功能插件名称效果 功能 检查代码bug xff0c 排除编码集错误 插件名称 SonarLint 效果 以下只是演示可以进行bug提示及优化 xff0c 还有更多 修复意见 xff1a 使用 logger 替代 System ou
  • idea插件安装方式(七)

    插件安装两种方式 在线安装 通过 Preferences gt Plugins gt marketplace 在线安装 离线安装 通过 https plugins jetbrains com 离线安装 比如 Lombok xff0c 找对应
  • mysql-递归查询(二)

    文章目录 情景描述数据准备递归sql 情景描述 mysql 表查询 xff0c 经常有通过子不断查询父 xff0c 直至查询不到为止 数据准备 SET NAMES utf8 span class token punctuation span
  • zabbix重启命令

    1 zabbix server服务重启 service zabbix server restart 或者 service zabbix server restart 2 zabbix agentd客户端重启 service zabbix a
  • 使用MediaPlayer实现播放、暂停、继续和停止功能的简易音乐播放器

    1 布局文件 lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt LinearLayout xmlns android 61 34 http schemas android c
  • H3C交换机web管理配置

    1 下载一个超级终端到PC机上 由于工作环境不能联网的环境下 xff0c 下载了好几个超级终端才能用 2 超级终端连接有很多教程 但是有一个重要的事情 xff1a 在COM1属性的端口设置里面 xff0c 将 xff08 位 B xff09
  • 交换机MIB浏览器ifType、ifDescr、ifMtu、ifInOctets等的含义

    1 ifType 接口的类型 取值117表示接口为GigabitEthernet 取值62表示借口为FastEnthernet 2 ifDescr 接口类型的描述 有GigabitEthernet FastEthernet等 3 ifMtu
  • mac下PyCharm导入第三方包

    最近对python有兴趣 xff0c 在网上搜了 八天深入理解python 视频教程 xff0c 由于用的mac xff0c 不用安装python xff0c 感觉瞬间开发环境就已经具备了 xff0c 然后连个ipython都没装上 xff
  • Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-

    Failed to execute goal org mybatis generator mybatis generator maven plugin 1 3 2 generate default cli on project ssm Ex
  • windows系统下QT打包后到不同系统的各种报错问题分析

    最近碰到好多人问关于WINDOWS上的QT打包后在自己电脑上可以运行 xff0c 换台电脑报各种错误的问题 于是特地写个帖子总结下一些问题 xff1a 首先是打包QT xff0c 将QT的系统库拉出来 这里可以借用windeployqt工具
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一 背景 二 请求接口上传文件 2 1 分析接口 2 2 python进行请求 三 总结 一 背景 也是前几天 xff0c 有一个需求上传文件需要自动化 具体是上传到系统一个文件 xff0c 并收到返回结果 考虑使用python的re
  • Optitrack光学动作捕捉

    光学式动作捕捉依靠一整套精密而复杂的光学摄像头来实现 xff0c 它通过计算机视觉原理 xff0c 由多个高速摄像机从不同角度对目标特征点进行跟踪来完成全身的动作的捕捉 美国大片中的后期特效制作大都是用的这种光学式动捕技术打开百度APP x
  • 带参数的宏的问题

    include 34 iostream 34 using namespace std define COMPUTE XX a a a 43 a 2 int main int a 61 2 int test1 61 COMPUTE XX 43
  • Qt TCP/UDP通讯封装

    Qt TCP UDP通讯封装 TCP客户端 class TcpClient public QTcpSocket Q OBJECT public explicit TcpClient QObject parent 61 nullptr Tcp