嵌入式学习之QT学习---8 QT网络编程之TCP通信

前言: Qt网络模块提供了用于编写TCP/IP客户端和服务器端程序的各种类,如用于TCP通信的QTcpSocket和QTcpServer,用于UDP通信的QUdpSocket,还有用于实现HTTP、FTP等普通网络协议的高级类,如:QNetworkReauest、QNetworkReply等。Qt模块还提供用于网络代理、网络承载管理的类,提供基于安全套接字层(Secure Sockets Layer,SSL)协议的安全网络通信的类。

1、浅谈网络编程

网络编程有TCP(transmission control protocol,被大多数Internet网络协议如:HTTP和FTP用于数据传输的低级网络协议) 和 UDP(user datagram protocol,用户数据报协议)。

区别
是否连接TCP面向连接 ;UDP面向非连接
传输可靠性TCP可靠 ;UDP不可靠
应用场合TCP适用于少量数据(如:传输文件) ;UDP可传输大量数据(如:传输视频语音)

TCP分为服务器和客户端,服务器这两个类都会用到;客户端只用到了QTcpSocket。

2、关于客户端的网络编程

服务器部分:

**第一部分:ui界面的设计**
(1)新建一个QT工程(路径为:D:\qt\qt_demo\network\TcpServer)
(2)在“帮助”–“索引”下面查看QTcpServer的相关信息;在工程文件中加入类QTcpServer所需要的模块以及在头文件里面包含所需要的头文件;类QTcpSocket同理。
在这里插入图片描述

QT       += core gui network

添加完之后,编译一下,看有无问题。通过这些天的学习,对于如何创建一个QT工程已经很了解和熟悉了。就是要规范和小心步骤,可以在操作的过程中做完一步、两步的,就执行一下编译,以防最后出现问题排错困难。
在这里插入图片描述
ok,编译无问题,继续往下走。
(3)跟设计“上位机串口助手”的思路一样,同样也需要设计ui界面,那么久根据之前的经验,先设计图像界面,在图像界面设计好之后,再设计逻辑功能。
TCP服务器需要有一个接收框(Plain Text Edit控件),一个发送框(Line Edit),几个按钮(pushbutton),服务器是不需要设置IP的,但是需要设置端口号(Line Edit),(Label),再使用(Group Box)控件将发送窗口以及接收窗口框起来,使得界面美观一些。
放置好控件之后,给ui界面的控件布局,红色框里的选择水平布局,黄色框里的选择垂直布局,整体再进行栅格布局。
在这里插入图片描述
编译运行之后,发现端口号的框框有点大了,给它修正一下,在"端口号"的Label控件后面放置一个水平“弹簧”控件即可。此外,接收框需要设置成“只读”的。调整过后,编译运行,结果如下:
在这里插入图片描述
ui界面设计好啦,接下来开始实现它的逻辑功能。
第二部分:实现逻辑功能
在写逻辑代码之前,需要给控件改名字。这个习惯是必须要培养的,不然在代码里出了乱子不好整了。

控件名字的修改
服务器要监听所有人发来的消息,监听要用到 QTcpServer类的public里面的listen
在这里插入图片描述
在程序编写中,还需要关联readyread信号
在这里插入图片描述

写完打开服务器、关闭服务器以及发送按钮的功能之后,编译一下,看是否能运行成功。但是我们不知道写的tcp服务器有没有问题,是否可以使用。有两种办法可以验证,一种是将客户端给写完,验证一下服务器是否有问题,同时也将客户端就给验证了,但是如果等到这时候再去验证的话,就无法确定到底客户端还是服务器那里出现了问题。还有一种办法是在网上找一个网络调试助手,用调试助手作客户端,然后用写的程序作服务器,看一下是否能互相通信。

客户端部分:

客户端只用到TcpSocket就可以啦。
第一个工作:ui界面的设计
首先要包含头文件以及network模块;
其次设计ui界面。同样地,也是需要有一个接收框,一个发送框,设置ip的框(因为客户端需要设置ip—Line Edit),端口号,三个按钮。放置好组件之后,给组件布局并编译运行,结果如下图所示:
在这里插入图片描述
接着修改组件的名称,在后续逻辑功能实现的时候会便利。
第二个工作:实现逻辑功能
再下一步,关联信号和槽。对于打开客户端来说,选择“自动关联”;对于“关闭客户端”以及“发送”来说,仍然选择自动关联。widget.cpp的代码如下:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    tcpSocket = new   QTcpSocket(this);
}

void Widget::connected_Slot()
{
    //在这个槽函数里面关联readyread
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}
 void Widget::readyRead_Slot()
 {
     //在这个槽函数里面进行一个读操作
     ui->recvEdit->appendPlainText(tcpSocket->readAll());
 }
 
Widget::~Widget()
{
    delete ui;
}

void Widget::on_openBt_clicked()
{
    //打开客户端:自动连接槽函数;令其连接服务器
    tcpSocket->connectToHost(ui->IPEdit->text(),ui->portEdit->text().toUInt()); //转成无符号的整型
    //连接成功之后,会发出连接成功的(connected)信号,然后用connect来关联一下就可以
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Slot()));
    //然后去头文件里面声明一下槽函数
 }   
void Widget::on_closeBt_clicked()
{
    tcpSocket->close();
}

void Widget::on_sendBt_clicked()
{
    tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
}

编译运行,无问题。
然后需要检查一下写的客户端和服务器能否正常运行。在界面上打开服务器的代码,编译一下“服务器”。然后再编译一下“客户端”。结果如下图所示:
在这里插入图片描述

3、收发功能的测试

在windows下的命令提示符里查看电脑的ip,如下图所示:
在这里插入图片描述

端口号一定要设置成一致的,进行测试,看服务器能否和客户端互相之间收发信息。
在这里插入图片描述
在这里插入图片描述
ok,功能还是可以的。后续需要多回顾整个流程,便于以后开发更多的东西!

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式Qt开发项目教程目录通常包括以下几个主要部分: 1. 嵌入式Qt开发入门:介绍嵌入式Qt开发的基础知识和环境准备,包括Qt的安装和配置,嵌入式开发板的选择和搭建等。 2. Qt编程基础:介绍Qt的基本编程概念和常用类库,包括信号与槽机制、界面设计、布局管理器、事件处理等内容。 3. Qt多媒体应用开发:介绍如何使用Qt开发多媒体应用,包括音频播放、视频播放、图像处理等相关内容。 4. Qt网络应用开发:介绍如何使用Qt进行网络通信,包括TCP/IP通信、UDP通信、HTTP通信等相关内容。 5. Qt数据存储和数据库:介绍如何使用Qt进行数据存储和数据库操作,包括文件读写、XML处理、SQLite数据库等相关内容。 6. 嵌入式Qt界面开发:介绍如何使用Qt进行界面开发,包括窗口管理、界面布局、控件使用、多语言支持等相关内容。 7. Qt图形应用开发:介绍如何使用Qt进行图形应用开发,包括图形绘制、图像处理、动画效果等相关内容。 8. 嵌入式Qt性能优化:介绍如何对嵌入式Qt应用进行性能优化,包括代码优化、内存管理、资源优化等相关内容。 9. 嵌入式Qt应用部署:介绍如何将嵌入式Qt应用部署到目标设备上,包括交叉编译、打包发布、调试技巧等相关内容。 总的来说,嵌入式Qt开发项目教程目录应该涵盖了从入门到实践的全面内容,帮助读者掌握嵌入式Qt开发的基本知识和技能,并能够独立完成嵌入式Qt应用的开发和部署。 ### 回答2: 嵌入式Qt开发项目教程目录如下: 第一章:嵌入式Qt开发介绍 - 介绍嵌入式Qt开发的概念和应用场景。 - 介绍Qt平台及其特点。 第二章:环境搭建 - 介绍嵌入式开发平台,如Linux或RTOS。 - 介绍Qt开发环境的安装和配置。 - 介绍交叉编译工具链的搭建。 第三章:Qt基础知识 - 介绍Qt的基本概念,如信号和槽机制、对象树等。 - 介绍Qt常用的核心类,如QWidget、QLabel、QPushButton等。 - 讲解Qt的布局管理器和UI设计工具。 第四章:嵌入式Qt应用开发 - 介绍Qt的事件处理和多线程编程。 - 讲解Qt网络通信和数据库访问。 - 介绍Qt图形和动画的应用。 第五章:嵌入式Qt与硬件交互 - 介绍如何使用Qt与硬件进行交互,如GPIO、串口、I2C等。 - 讲解Qt的音频和视频处理能力。 第六章:嵌入式Qt应用优化和调试 - 介绍Qt应用的性能优化技巧。 - 讲解如何使用Qt Creator进行调试和单元测试。 - 介绍Qt的错误处理和日志记录。 第七章:嵌入式Qt应用部署与发布 - 介绍Qt应用的打包和部署策略。 - 讲解如何进行Qt应用的远程调试和更新。 第八章:案例分析与实践 - 通过实际的嵌入式Qt开发案例,加深对前述知识点的理解。 - 讨论如何解决实际项目中遇到的问题。 此目录提供了一条完整的嵌入式Qt开发学习路径,从环境搭建到高级应用优化,逐步引导读者了解嵌入式Qt开发的各个方面,并附带示例代码和实践案例,帮助读者更好地理解和掌握该领域的知识与技能。 ### 回答3: 嵌入式Qt开发项目教程目录可以大致分为以下几个部分: 1. Qt简介: - Qt介绍 - Qt的优点和特点 - Qt的应用领域 - Qt的版本和许可 2. 嵌入式Qt开发环境设置: - 操作系统的选择和配置 - Qt SDK的安装 - Qt Creator的配置 - SDK的交叉编译配置 - Qt交叉编译工具链的配置 3. 基本Qt开发知识: - Qt的核心概念和类库 - Qt的信号与槽机制 - Qt的事件处理 - Qt的界面设计和布局 4. 嵌入式应用程序架构设计: - 嵌入式应用程序的特点和要求 - 设计模式在嵌入式Qt开发中的应用 - MVC模式和Qt的数据模型 - 多线程编程 5. 嵌入式Qt开发工具的使用: - Qt Creator的使用技巧 - 调试嵌入式Qt应用程序 - 嵌入式Qt应用程序的性能优化 - Qt的国际化和本地化支持 6. 嵌入式Qt常用模块的使用: - Qt网络编程 - Qt数据库编程 - Qt图形编程 - Qt多媒体编程 - Qt传感器编程 - Qt系统操作和硬件控制 7. Qt嵌入式系统中的应用案例: - 嵌入式Qt应用的开发流程 - 嵌入式Qt应用的实际项目案例 - Qt在物联网和智能家居中的应用 通过以上这些章节和具体内容,可以帮助初学者系统地了解嵌入式Qt开发的基本知识和技能,并能够应用于实际项目中。当然,根据实际情况,可以根据项目需求进行适当的调整和补充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值