QT网络通信-TCP、UDP通信

news/2024/5/18 14:09:35 标签: qt, tcp/ip, udp, c++

时间记录:2024/1/17
pro文件添加模块network

一、TCP服务端

(1)创建TCP服务器对象QTcpServer
(2)为QTcpServer对象的newConnection信号绑定槽,用来监听TCP客户端的新连接,有新的客户端连接便会触发此信号
(3)使用nextPendingConnection方法获取连接的Tcp客户端对象QTcpSocket
(4)为QTcpSocketreadReady信号绑定槽,用来读取客户端发送到服务器端的消息,每次客户端有新消息发送,服务器端便会触发此信号
(5)QTcpSocketstateChanged信号可以用来监听客户端连接状态,槽函数中sender方法获取触发信号的对象,当检测到客户端连接断开时使用deleteLater方法清理对象内存,防止内存溢出
(6)获取连接的客户端IP和端口,使用QTcpSocket类的peerAddress方法和peerPort方法
(7)使用QTcpSocket对象的readwrite方法与客户端进行数据的收发
(8)QTcpServer类的findChildren方法可以获取连接的所有客户端对象
(9)QTcpServer类的listen方法用于监听本机IP和端口,即启动服务器
(10)QTcpServer类的close方法用于停止监听连接,表示不会有新的连接能连上,但是已经连接的客户端依旧可以发送信息

二、TCP客户端

(1)创建TCP客户端对象QTcpSocket
(2)为readReady信号绑定槽函数,监听数据的到来
(3)为stateChanged信号绑定槽函数,监听连接的状态变化
(4)使用writeread方法发送和读取信息
(5)使用bind方法绑定IP和端口
(6)使用connectToHost方法连接指定的服务器
(7)使用disconnectFromHost方法断开与服务器之间的连接

三、UDP通信

(1)创建UDP对象QUdpSocket
(2)为readReady信号绑定槽函数
(3)pendingDatagramSize方法获取接收到的数据大小
(4)hasPendingDatagrams方法判断是否有数据报到来
(5)readDatagram方法读取指定IP和端口发送过来的数据报
(6)bind方法绑定本机IP和端口号,即建立连接
(7)abort方法解除绑定,即断开连接
(8)writeDatagram方法向指定IP和端口的主机发送数据报,QHostAddress::Broadcast表示向局域网的所有IP指定端口发送数据报,即广播

四、QT实现单例模式

1.头文件

publicstatic MWidget *getInstance();

private:
	MWidget(QWidget *parent = nullptr);
    ~MWidget();
    static MWidget *instance;

2.源文件

MWidget *MWidget::instance = nullptr;

MWidget *MWidget::getInstance()
{
    if(instance==nullptr)
        instance = new MWidget;
    return instance;
}

http://www.niftyadmin.cn/n/5339846.html

相关文章

C(C++)和Python实现STM32F4实时操作系统(FreeRTOS)吸尘器

Arm Cortex M 微控制器 STM32F4 通过 FreeRTOS 和 Mbed OS 实现的实时操作系统,使用了 C 语言(微控制器的“编程”语言)、C语言和 MicroPython(允许在微控制器上使用 Python 语言)数字控制吸尘器。 STM32F4微控制器 …

MBR扇区修复和GRUB引导修复实验

修复MBR扇区 步骤一:在进行实验之前我们需要新加一块磁盘,并对新加磁盘进行分区处理,用来备份sda磁盘的MBR及分区表信息。(注:在实验中可以不像我如此这么繁琐,一个主分区,并格式化挂载即可&am…

np.argsort排序问题(关于位次)-含GitHub上在numpy项目下提问的回复-总结可行方案

np.argsort 与获取位相关问题 位次: 数组中的数据在其排序之后的另一个数组中的位置 [1,0,2,3] 中 0的位次是1 1的位次是2 2的位次是3 3的位次是4 这里先直接给出结论,np.argsort()返回的索引排序与实际位次在确实在某些情况下会出现一致,但后来numpy的开…

WPF常用技巧-原生子窗口嵌套/切换

在没有使用MVVM框架导航功能的情况下,要实现子窗口在主窗口的嵌套,可以通过在主窗口中使用ContentControl容器控件来完成,子窗口使用用户控件来构建,然后作为内容放入到主窗口的ContentControl中就OK了。 创建导航栏模型 public…

Modbus协议学习第五篇之libmodbus库的编译

前言 本篇博客主要讲解在Windows下的libmodbus库的编译过程,供大家参考。 所需环境:Windows操作系统/ Visual Studio / Github 具体步骤 第一步:下载并解压libmodbus源码 首先我们进入libmodbus库的github地址:libmodbus&#x…

数据结构之树和二叉树定义

数据结构之树和二叉树定义 1、树的定义2、树的基本概念3、二叉树的定义 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以…

cpp_12_异常处理

1 异常理论 1.1 何为异常? 在实际运行环境中发生,却在设计、编码、测试阶段无法预料的,各种潜在的问题。 1.2 报告异常的2种机制 1)通过 return 返回值报告异常信息: 所有局部对象都能正确地被析构、被释放 定位错…

信息安全的脆弱性及常见安全攻击

目录 信息安全概述信息安全现状及挑战传统安全防护逐步失效 安全风险能见度不足看不清资产看不见新型威胁看不见内网潜藏风险 常见的网络安全术语信息安全的脆弱性及常见安全攻击网络环境的开放性协议栈的脆弱性及常见攻击常见安全风险 协议栈自身的脆弱性网络的基本攻击模式 链…