08 qt进程和网络编程(cs模型)

这篇具有很好参考价值的文章主要介绍了08 qt进程和网络编程(cs模型)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 、qt进程

qt中进程最主要的任务就是启动额外应用程序 并且跟他们之间通信。进程类为QProcess

定义 用途
Header: #include
qmake: QT += core
Inherits: QIODevice//继承于IO设备类

1.1 QProcess基本使用

第一步:创建一个QProcess对象

// process = new QProcess(this); //说明启动的额外的应用程序与当前qt应用程序是依赖关系
process = new QProcess;//说明启动的额外的应用程序与当前qt应用程序是无依赖关系,可以脱离你独立运行

第二步:将要执行的应用 程序名字或者路径+应用 程序名字,做为start函数的参数即可

void MainWindow::on_startButton_clicked()
{
  // process->start("C:/Users/PC/Desktop/FeiQ.exe"); //ok
   process->start("notepad"); //额外应用程序notepad就相当于process
}

1.2 启动多个的额外应用程序

常用接口:

  1. 启动应用程序
定义 用途
void start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)
void start(const QString &command, QIODevice::OpenMode mode = ReadWrite)
void start(QIODevice::OpenMode mode = ReadWrite)

参数说明:

  • const QString &program ----- 启动的应用程序名,最好加路径
  • const QString &command ----> 启动的命令
  • const QStringList &arguments ----> 启动应用程序时,需要设置的参数列表
  1. 设置要启动的应用 程序和参数
定义 用途
void setProgram(const QString &program)
void setArguments(const QStringList &arguments)

以上两个接口,结合void start(QIODevice::OpenMode mode = ReadWrite)一起使用

  1. 让程序进入阻塞状态
定义 用途
bool waitForFinished(int msecs = 30000)
bool waitForStarted(int msecs = 30000)

Blocks until the process has finished and the finished() signal has been emitted, or until msecs milliseconds have passed.

  1. 杀死进程
定义 用途
void kill()//杀掉进程

它通常跟void waitForFinished(int msecs = 30000)

  1. 进程运行状态
定义 用途
QProcess::ProcessState state() const//获取当前进程所运行状态

QProcess::ProcessState

定义 数值 用途
QProcess::NotRunning 0 The process is not running.
QProcess::Starting 1 The process is starting, but the program has not yet been invoked.
QProcess::Running 2 The process is running and is ready for reading and writing.
void MainWindow::on_notepadButton_clicked()
{
    if(QProcess::Running == process->state())
    {
        process->kill();
        process->waitForFinished();
    }
    process->start("notepad");
}

void MainWindow::on_calcButton_clicked()
{
    if(QProcess::Running == process->state())
    {
        process->kill();
        process->waitForFinished();
    }
   process->start("calc");
}

void MainWindow::on_qtButton_clicked()
{
    if(QProcess::Running == process->state())
    {
        process->kill();
        process->waitForFinished();
    }
   process->start("C:/Users/PC/Desktop/Lucky_draw.exe");
}

1.3 进程间数据传输

因为QProcess类继承于QIODevice,它也是一种io设备,那么,它也可以读取数据
QIODvice常用信号:

定义 用途
void readyRead()//当QProcess有数据可以读取时,会发送这个信号

用户想要读取它的数据时,只需要跟该信号建立信号和槽,在槽函数时,可以 通过readAll()读数据,
因为该信号只相当于一个通知,并不传输数据

定义 用途
QByteArray read(qint64 maxSize)
QByteArray readAll()

基本实现:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    process = new QProcess;

    //当proces进程有数据可读取时,那么它会自动发送一个信号 readyRead()
    connect(process,&QProcess::readyRead,this,&MainWindow::readData);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::readData()
{
    qDebug() << "------";
  QByteArray data = process->readAll();
  qDebug() << data;
}

void MainWindow::on_startButton_clicked()
{
       process->start("ipconfig");
}

二 qt网络编程

网络软件协议:

  • 网络大致分为两种模型:OSITCP/IP
  • OSI:七层: 应用 表示 会话 传输 网络 数据链路 物理层
  • TCP/IP:四层:应用 传输 网络 物理层
  • 应用层:http ftp
  • 传输:TCP UDP
  • 网络:IP

在QT中,对于网络编程,也是采用模块化管理

To link against the Qt Network module, add this line to the project file(.pro):
  QT += network // 在当前工程中,增加网络,工程中才可以 使用网络接口API

2.1 TCP网络通信

TCP通信是基于C/S模型

  • C---- 客户端
  • S ---- 服务端

客户端和服务端之间通信以3次握手,建立边连接后,才开始发送数据
在Qt客户端和服务端分别使用来封装

客户端:

定义 用途
QTcpSocket TCP socket

服务端:

定义 用途
QTcpServer TCP-based server

在客户端与服务端通信之间,服务端必须先开启。

QTcpSocket— 客户端

定义 用途
Header: #include
qmake: QT += network //在pro文件中所要增加的 模块
Inherits: QAbstractSocket//基类

客户端的实现步骤:
第一步:创建客户端对象
第二步:根据ip地址和端口号,向服务器发起连接

定义 用途
virtual void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
virtual void connectToHost(const QHostAddress &address, quint16 port, QIODevice::OpenMode openMode = ReadWrite)
const QString &hostName  ------ 》服务端的ip地址
quint16 port -----》服务端的端口号
const QHostAddress &address ------》服务端的主机对象,通用使用ip地址做为字符串参数,再使用构造函数来完成该对象的创建QHostAddress(const QString &address)

第三步:和服务器进行通信:读或者写

读:

定义 用途
qint64 read(char *data, qint64 maxSize)
QByteArray read(qint64 maxSize)
QByteArray readAll()

写:

定义 用途
qint64 write(const char *data, qint64 maxSize)
qint64 write(const char *data)qint
64write (const QByteArray &byteArray)

思考:客户端什么时候要进行数据读取 ----- 信号和槽

定义 用途
void readyRead()

当客户端有数据读取时,也会发送一个信号,只需要建立该信号和槽连接,在槽中进行数据读取

服务端— QTcpServer

定义 用途
Header: #include
qmake: QT += network//使用类所要增加的模块
Inherits: QObject//基类

服务端实现步骤:
第一步:创建一个服务端对象
第二步:调用listen来监听是否用新的客户端来进行连接—listen()

bool QTcpServer::
listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

参数说明:
参数一:const QHostAddress &address = QHostAddress::Any — 所有网络设备
参数二:quint16 port ---- 跟客户端保持一致端口号
第三步:当有新的客户端来进行连接时,服务端会发出一个信号:newConnection()
第四步:在服务端建立与newConnection()信号相关的槽函数:newClient();
第五步:在槽函数中,调用nextPendingConnection()得到新的连接客户端对象

QTcpSocket *QTcpServer::nextPendingConnection()

第六步:可以进行服务端和连接上客户端之间的数据传输:读和写
写操作:直接调用write写
读操作:当客户端写入数据过来时,连接上来的客户端也会发送一个信号:readyRead(),也建立与该信号相关的槽函数来完成从客户端读取数据文章来源地址https://www.toymoban.com/news/detail-652039.html

到了这里,关于08 qt进程和网络编程(cs模型)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4、QT中的网络编程

    子网网络:局域网,只能进行内网的通信 公网网络:因特网,服务器等可以进行远程的通信 4层模型:应用层、传输层、网络层、物理层 应用层:用户自定义的网络数据传输协议:ssh、tftp、tfp、http 等 传输层:tcp/udp出传输协议 网络层:IPV4/IPV6,3G,4G,5G等网络协议 物理层

    2024年02月09日
    浏览(22)
  • ℰ悟透Qt—Http网络编程

    网络访问 API 建立在一个 QNetworkAccessManager 对象之上,该对象保存了发送请求所需的公共配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号和可用于监视网络操作进度的回复信号。整个 Qt 应用程序只需要一个 QNetworkAccessManager 实例。由于 QNetworkAccessManager 基于

    2024年02月11日
    浏览(50)
  • Qt中的网络编程(TCP)

    在Qt中网络编程主要由Qt Network模块来编写基于TCP/Ip的网络程序,其中提供了许多的类: 可以点击该链接查看:Qt网络C++类|Qt网络 5.15.12  常见的有: QTcpServer 基于 TCP 的服务器 QTcpSocket TCP 套接字 QUdpSocket UDP 套接字 QDtls 此类为 UDP 套接字提供加密 QHostAddress IP地址 QHostInfo 用于主

    2024年02月07日
    浏览(90)
  • [Qt网络编程]之UDP通讯的简单编程实现

    hello!欢迎大家来到我的Qt学习系列之 网络编程之UDP通讯的简单编程实现。 希望这篇文章能对你有所帮助!!! 本篇文章的相关知识请看我的上篇文章: 目录 UDP通讯  基于主窗口的实现  基于线程的实现          UDP数据报协议是一个面向无连接的传输层报文协议 ,它简

    2024年04月25日
    浏览(40)
  • 【QT网络编程】实现UDP协议通信

    Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了 一种无需建立连接就可以发送封装的 IP 数据包的方法 。RFC 768 描述了 UDP。 UDP协议根据消息传送模式可以分为: 单播(Unicast)、组播(Multicast)和广播(

    2024年02月02日
    浏览(40)
  • QT TCP网络编程——服务端的实现

    温馨提示:初来乍到,请多关照,文章如有不足,还请不吝赐教。本程序是仿照通讯助手(NetAssist.exe)进行界面设计以及基本功能实现的,主要实现的功能有监听服务器端口、发送、接收数据。使用到的工具及编程语言为:visual studio 2015、QT、C++,其中代码仅供参考 提示:以

    2024年02月04日
    浏览(31)
  • 【Qt网络编程】实现TCP协议通信

    传输控制协议(TCP,Transmission Control Protocol)是 一种面向连接的、可靠的、基于字节流的传输层通信协议 ,由IETF的RFC 793 定义。 TCP建立连接前,需要进行三次握手,如下图所示: TCP断开连接前,需要进行四次挥手,如下图所示: Qt中提供了QTcpSocket类和QTcpServer类分别用于创

    2024年02月16日
    浏览(39)
  • Qt 套接字类(QTcpSocket和QUdpSocket)解密:迈向 Qt 网络编程之巅

    套接字类在网络编程中起着至关重要的作用。套接字(Socket)为基于网络的通信提供了一种机制,使得不同设备、不同操作系统上的应用程序可以互相传输数据。套接字类负责建立连接、发送和接收数据、处理错误等任务,以简化网络通信的实现。通过使用套接字类,开发人

    2023年04月19日
    浏览(24)
  • Qt网络编程 (udp广播和接收例)

    使用两个项目 1 sender 用来广播\\\"hello world\\\"; 2 receiver 用来接收广播信息 1 创建Qdialog类 2 在sender.pro 中添加 QT +=network 一行代码 3 在sender.h 中声明类 class QUdpSocket; 在声明一个私有对象 QUdpSocket *sender; 4 在ui界面拖入一个按钮 用来触发广播信息 其槽函数如下 在sender.cpp 构造函数中添

    2024年02月11日
    浏览(28)
  • 在Qt中使用Socket进行网络编程

    Socket编程是一种常见的网络编程方式,允许不同计算机之间通过网络进行通信。Qt提供了丰富的网络编程工具,使得在Qt应用程序中实现网络通信变得相对简单。本篇博文将介绍如何在Qt中使用Socket进行网络编程,包括常用的接口函数原型、使用方法以及应用场景。 首先,我们

    2024年02月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包