QT多线程网络通信

2023-05-16

QT多线程网络通信

使用QT提供的类进行基于TCP的套接字通信需要用到两个类:

1、QTcpServer 服务器类,用于监听客户端连接以及和客户端建立连接

2、QTcpSocket 通信的套接字类,客户端、服务器端都需要使用

​ 这两个套接字通信类都属于网络模块 network;QFile和QTcpSocket的祖先类都是QIODevice

QTcpServer

公共成员函数

QTcpServer::QTcpserver(QObject *parent = Q_NULLPTR);
//构造成员函数,构造一个用于监听的服务器端对象
//传入的参数是一个父对象
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
 //传入的参数一个是要绑定的本地地址,any代表可以是任意的ip地址,建议使用默认的any;用于定位主机
    //一个是端口号,把数据发送到某一个进程,使用时不赋值就会随机绑定一个端口
bool QTcpServer::isListening() const
    //判断当前对象是否在监听,是返回true,否返回false
QHostAddress Qrcpserver::serverAddress()const;
//如果当前对象正在监听返回监听的服务器地址信息,否则返回QHostAddress::Nul1
quint16 QTcpServer::serverport()const
 //如果服务器正在侦听连接,则返回服务器的端口;否则返回0
QTcpSocket* QTcpSerVer::nextPendingConnection();
//得到和客户端建立连接之后用于通信的QTcpsocket 套接字对象
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
    //当接受新连接导致错误时,将发射如下信号。socketError参数描述了发生的错误相关信息
[signal] void QTcpServer::newConnection()
   // 每次有新连接可用时都会发出newConnection0信号。
   // 可以和QTcpSocket* QTcpSerVer::nextPendingConnection();搭配使用
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
    //连接服务器,需要指定服务器端绑定的IP和端口信息。

QTcpSocket

QTcpSocket 是一个套接字通信类,不管是客户端还是服务器端都需要使用。在Qt中发送和接收数据也属于IO操作(网络I0),先来看一下这个类的继承关系:

image-20210722133115742

接收数据:

//指定可接收的最大字节数maxsize的数据到指针 data指向的内存中
qint64 QIODevice::read(char*data,qint64 maxsize);
//指定可接收的最大字节数maxsize,返回接收的字符串
    QByteArray QIODevice::read(qint64 maxsize);
//将当前可用操作数据全部读出,通过返回值返回读出的字符串
        QByteArray QIODevice::readAll();

发送数据:

	//发送指针 data指向的内存中的maxSize个字节的数据
qint64 QIoDevice::write(const char*data,qint64 maxsize);

    //发送指针 data指向的内存中的数据,字串以\0作为结束标记
qint64 QIODevice::write(const char*data);

    //发送参数指定的字符串
qint64 QIODevice::write(const QByteArray&byteArray);

信号:

//在使用Qrcpsocket进行套接字通信的过程中,如果该类对象发射出readyRead()信号,说明对端发送的数达了发之后就可以调用read函数接收数据了。
[signal]void QIODevice::readyRead();
    
   
    //调用connectTolost()函鼓并成功建立连接之后发出connected()信号。
[signal]void QAbstractsocket::connected();
   
   
   // 在套接字浙开连接时发出disconnected()信号。
[signal]void QAbstractsocket::disconnected();

通信流程

1.创建套接字服务器 Qrcpserver 对象
2.通过Qrcpserver 对象设置监听,即:QTcpserver::listen()
3.基于QTcpServer::newconnection()信号检测是否有新的客户端连接

4.如果有新的客户端连接调用QTcpsocket *QTcpserver::nextpendingconnection()得到通信的套接字对象
5.使用通信的套接字对象 QTcpSocket 和客户端进行通信

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

QT多线程网络通信 的相关文章

  • 从0使用TCP手撸http服务器六

    html模板设计 xff1a 上篇我们说到通过路由去返回不同的html页面 xff0c 如果每一个页面都是一个数组的话 xff0c 那么我们可能需要很多数组 xff0c 里面很多内容都是一样的 xff0c 这样子会浪费我们单片机很多flas
  • 移植使用nr_micro_shell

    1 介绍 在使用linux和win系统的时候大家看到命令行也是很熟悉的了 xff0c 大家的第一个hello程序应该都是控制台程序 xff0c 在系统层面我们可以使用命令行操作我们的pc xff0c 那么在单片机里面通过串口怎么用命令操作单
  • 字符串——C++拼接多个字符串

    拼接多个字符串在C 43 43 的可以通过strcpy s 和srtcat s实现 xff0c 如 xff1a span class token keyword int span span class token function main
  • 使用VS CODE测试nr_micro_shell

    上篇说到使用dev c 43 43 来编译nr micro shell xff0c 整体还是很方便的 xff0c 不要写任何命令和文件就能完成编译 xff0c 但是dev c 43 43 这个工具并不是很好用 xff0c 今天使用VS CO
  • Arduino用esp8266WiFi模块连接到服务器

    昨天用串口工具测试了一波esp8266WiFi模块连接云服务 没有问题 今天我决定用芯片来控制它 xff0c 本来想用51 xff0c 后面感觉太lou xff0c 又决定要stm32 这个感觉不错 xff0c 但是32芯片查资料确实麻烦
  • 单片机用AD测量电池电压的值

    单片机的引脚最大输入电压一般为3 3V或者5 0V xff0c 电流是25ma xff0c 40ma 而电池一般有3 3V 36V不等 xff0c 电流也是好几A xff0c 超过5 0的电池一接到单片机 AD口 xff0c 可能和三星手机
  • stm32中pwm频率和占空比设置

    对于72M频率来说 xff0c 计算pwm频率是 xff1a 频率 xff1a Fpwm 61 72M arr 43 1 psc 43 1 单位 xff1a Hz 占空比 xff1a duty circle 61 TIM3 gt CCR1
  • stm32最简单的实现BootLoader

    BootLoader大家应该都知道是干什么的 xff0c 简单的来说就是程序开始运行前的一段程序 在成熟的产品中 xff0c 通常都是采用BootLoader方式来升级产品的程序 也就是IAP升级 在了解完基本的实现原理后 xff0c 可以
  • c语言编写http服务器

    一直想弄一下http服务器 xff0c 一直没有深入的去看http协议 昨天研究了一天 xff0c 查看源码和优化 xff0c 终于实现了 也稍微的理解了一下http协议 身为一个嵌入式工程师 xff0c 需要了解http协议吗 xff1f
  • html页面实时刷新显示服务器数据

    在上一篇中我说到浏览器和服务器交互数据 xff0c 是实现了服务器发数据给浏览器 xff0c 并在页面上显示 xff0c 但是是通过按钮点击刷新的 xff0c 而且数据是和html页面一起发过来的 xff0c 在这里我是数据放到页面数组里
  • Windows 终端神器 MobaXterm & 常用设置

    文章目录 1 主要功能2 安装插件3 常用设置4 遇到的问题5 总结 MobaXterm 是远程计算的终极工具箱 在单个 Windows 应用程序中 xff0c 它提供了大量为程序员 网站管理员 IT管理员以及几乎所有需要以更简单的方式处理
  • week 9作业 目录管理器,打牌,椅子

    week9 目录管理器打牌长椅 目录管理器 题目 xff1a 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff
  • 阿贝云使用心得

    阿贝云使用心得 最进因为学习的原因 xff0c 项目要到线上去测试 xff0c 朋友给我介绍了阿贝云 xff0c 现在用了已经两个月了 xff0c 个人感觉还是功能很强大的 xff0c 最关键的是 xff0c 像我这样的学生党 xff0c
  • 阿里云网站域名备案注销方法

    阿里云网站域名备案如何注销 xff1f 域名备案注销很简单 xff0c 阿里云百科网告诉你网站域名备案注销方法 域名备案注销 域名备案注销分为两种 xff0c 即注销主体和注销网站 xff0c 先选择注销种类 xff1a 注销主体 xff1
  • 【CCTC 2017】TensorFlow在金融科技应用,以及大规模分布式机器学习系统最佳实践...

    CSDN 现场报道 5月18日 19日 xff0c CCTC 2017中国云计算技术大会 xff08 Cloud Computing Technology Conference 2017 xff0c 简称CCTC 2017 xff09 在北
  • win10 linux(wsl子系统)删除方法

    管理员账号运行Powershell 1 xff0c 查看已经安装软件包 xff1a Get AppxPackage allusers Select Name PackageFullName 2 xff0c 删除对应的安装软件包 xff1a
  • C语言学习之sprintf

    sprintf函数介绍 xff1a 该函数原型为 xff1a int sprintf char str const char format 该函数的功能为 xff1a 本该输出到显示上的数据 xff0c 改为输出到str所指导内存空间中 x
  • 本地化生成Swift脚本

    iOS本地化生成Swift脚本 看过其他人写的的脚本后发现有些问题 xff0c 其他人会把Localizable strings中的value值传入NSLocalizedString xff0c 实际上这是不对的 xff0c 按理应该传入k
  • 2021-03-08

    MachOView修复版 修复闪退https github com GRSource MachOView git
  • Mac终端每次启动都要source ~/.zshrc的问题

    Mac终端每次启动都要source zshrc的问题 如果在系统用户与群组当中设置了默认shell为 bin zsh xff0c 在启动终端时如果仍然需要source zhsrc xff0c 可以在终端的偏好设置当中查看是否使用的是 bin

随机推荐

  • iOS动画:Stroke和Path动画(9)

    利用stroke和Path动画制作下拉刷新动画 首先创建一个虚线圆 span class token keyword let span ovalShapeLayer span class token operator 61 span spa
  • iOS动画:3D动画(18)

    根据图示创建动画 xff0c 当点击菜单按钮时 xff0c 需要显示左侧菜单栏 效果看起来就像一个3D动画 现在我们来实现这种效果 打开工程中的ContainerViewController swift xff0c 创建3D变换函数 xff
  • iOS动画:粒子发射器(20)

    我们来实现这种下雪的粒子效果 要创建粒子发射器的动画 xff0c 需要用到一个新的layer xff1a CAEmitterLayer 在viewDidLoad中创建emitter对象 span class token keyword le
  • iOS动画:UIImageView帧动画(完结)

    这是iOS动画的最后一章 xff0c 比较简单 xff0c 我们来创建一只企鹅移动的动画 1 设置帧动画 span class token keyword var span walkFrames span class token opera
  • STM32F429入门(三):使用寄存器点亮LED

    xff08 一 xff09 打开原理图 xff0c 找到led所在引脚 xff0c 选用PH10 xff08 二 xff09 选取寄存器 xff0c 选用GPIO端口输出数据寄存器 GPIO 端口输出数据寄存器 GPIOx ODR x 61
  • opengauss的安装

    一 xff0e VMware 下载安装 进入官网的 VMware Workstation Pro 页面 xff0c 浏览功能特性 应用场景 系统要求等 下滑页面点击 试用 Workstation 16 Pro 下方的下载链接 xff0c 跳
  • Linux下解决GBK迁移到UTF-8中文名乱码

    在windows上使用ftp上传文件到Linux上 xff0c 中文名称在Linux系统中显示为乱码 虽然将Linux的env设置了LANG 61 en US UTF 8 并且本地的Shell客户端编码也设置成UTF 8 xff0c 但在S
  • Boost库学习笔记(1)—— 安装编译

    文章目录 一 概述二 构建方式三 链接库四 官方文档五 开发过程注意项1 编译出错 34 fatal error C1189 error WinSock h has already been included 34 一 概述 Boost是免
  • C++/socket缓冲区的大小设置

    设置socket发送 接收缓冲区大小为64k xff0c 默认为8k xff0c 最大为64k int value 61 65535 int tmpCode 61 0 tmpCode 61 setsockopt m UdpSendSocke
  • Win7远程桌面“发生身份验证错误。要求的函数不受支持”

    安装 KB2574819 KB2592687两个更新补丁重启后可解决
  • PID控制参数GIF动态图解

    PID控制参数GIF动态图解
  • LATEX公式行间距调整

    LATEX默认的行间公式与上下文本间距过大 以book类为例 xff0c 公式和文本之间的间距由 abovedisplayskip 和 belowdisplayskip 两个距离来控制的 book类10号字体的定义为 xff1a renew
  • Debian 10导出已安装软件包名称和版本

    Debian 10导出已安装软件包名称和版本 dpkg span class token operator span query span class token operator span show span class token op
  • opencv cmake配置

    opencv cmake配置 span class token function wget span https github com opencv opencv releases download 4 5 3 opencv 4 5 3 v
  • android开发笔记之系统属性(ro.com.google.clientidbase.ms)随卡适配

    客户要求 客户提了一个小需求 xff0c 就是要将系统属性 ro com google clientidbase ms 随卡适配 具体要求是 xff1a 如果插中国的卡 xff0c 系统属性ro com google clientidbas
  • FreeRTOS(三)——应用开发(一)

    文章目录 0x01 FreeRTOS文件夹FreeRTOSConfig h文件内容上面定义的宏决定FreeRTOS h文件中的定义0x02 创建任务创建静态任务过程configSUPPORT STATIC ALLOCATION创建动态任务过
  • 免费的天气预报webservice接口

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 【VsCode修改侧边栏字体大小——用缩放的方法】

    VsCode修改侧边栏字体大小 用缩放的方法 缩放界面字体百分比 xff08 包括编辑器界面 xff09 1 Vscode界面缩放2 Text Editor字体大小调节 缩放界面字体百分比 xff08 包括编辑器界面 xff09 如果只修改
  • Linux c和cpp如何获取真实时间和绝对时间

    使用这些函数的组装可以用来记录程序执行时间 xff0c 和执行时长 include lt iostream gt include lt chrono gt include lt cstdio gt include lt sys time h
  • QT多线程网络通信

    QT多线程网络通信 使用QT提供的类进行基于TCP的套接字通信需要用到两个类 xff1a 1 QTcpServer 服务器类 xff0c 用于监听客户端连接以及和客户端建立连接 2 QTcpSocket 通信的套接字类 xff0c 客户端