QT实现客服端和服务器之间消息和文件交互
bigegpt 2024-12-24 10:52 7 浏览
平台环境
龙芯务器
Qt5.6.1可视化编程的开发环境
MySQL5.5.40数据库
数据库选择与安装
将mysql-5.5.40解压至MySQL SERVER文件夹中,并重命名为mysql-5.5,接着修改my-default.ini文件中相应的信息并进行环境变量的配置,最后可通过MySQL指令“ mysql -u root -p ”进入数据库。为了保证数据库信息的隐秘性,需要为数据库添加root密码,通过MySQL指令“set password for root@localhost=password('xxxxxx')”增加root密码为xxxxxx。
交叉编译工具链GCC的安装
(1)创建相应目录存放编译器;
使用mkdir /wyj/mipsel指令创建路径为/wyj/mipsel的文件夹,该文件夹用来存放mipsel-linux-gcc编译器的所以使用的工具。
(2)将编译器安装包进行解压;
进入/wyj/mipsel文件夹,用tar jxvf mipsel-linux-gcc-4.9.3.tar.xz对交叉编译工具进行解压。
(3)设置环境变量PATH的值;
用$export PATH=/wyj/mipsel/mipsel-linux-gcc-4.9.3/bin:$PATH指令设置环境变量PATH的值。
(4)测试交叉编译器是否顺利安装。
在龙芯服务器的终端中写入mipsel-linux-gcc -v,如果终端输出交叉编译器的安装版本号及其配置的有关信息,则说明交叉编译已经顺利安装。
数据库创建数据
MySQL指令create database xxx进行创建一个名为xxx的数据库,用use xxx指令指明是对xxx数据库进行操作,然后用create xxx information (id int , name text , sno text , kfh text , kno text , sdept text)指令在xxx数据库中创建名为information的数据库表,数据库表里面的信息设置为id,name,sno,kfh,kno和sdept,接着利用insert into information values(*,*,*,*,*)向information表格中添加数据,最后用net stop mysql关闭数据库,并用quit指令进行退出。
Qt的开发环境搭建
(1)下载Qt开发集成环境,解压并进入该目录下;
$ tar zxvf qt-everywhere-opensource-src-5.6.1.tar.gz
$ cd qt-everywhere-opensource-src-5.6.1/
(2)进行gmake配置使其能一次性通过,最好运行 gmake 及 gmake install,就会安装在 /usr/local/Qt-5.6.1 的目录中;
$ ./configure -qt-xcb -skip qtdeclarative
$ gmake
$ gmake install
(2)配置环境,编辑系统环境变量;
在龙芯服务器的终端命令行中输入命令行vi /etc/profile打开对应的文件,在该文件的最后需要添加如下代码:
export QTDIR=/usr/local/Qt-5.6.1
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(3)保存之后退出,再终端执行命令source /etc/profile让配置的环境生效;
(4)验证是否安装成功。
在龙芯服务器的终端输入命令行qmake -version,如果在终端中出现如下信息,那么说明环境以及配置安装成功:
QMake version 3.0
Using Qt version 5.6.1 in /usr/local/Qt-5.6.1/lib
Web实现
TCP网络通信的流程
龙芯服务器终端下服务器端和客户端运行
利用交叉编译工具链GCC生成可运行文件,指令为gcc xxx.c -o xxx
实现服务器端和客户端文字数据交互
服务器端建立通信
(1)在数据通信过程中需要用到两个套接字,一个是监听套接字,另一个是通信套接字
QTcpServer *tcpServer; //监听套接字
QTcpSocket *tcpSocket; //通信套接字
(2)在server.h中定义的两个套接字变量需要在server.cpp中进行初始化,将它们赋值为NULL,同时监听套接字分配空间,指定父对象
tcpServer=NULL;
tcpSocket=NULL;
tcpServer=new QTcpServer(this);
(3)当有客户端连接时就进行分配空间,使用connect函数进行连接,建立套接字进行通讯,取出建立好连接的套接字获取对方的IP地址和端口号,在窗口上显示连接成功;
connect(tcpServer,&QTcpServer::newConnection,[=]()
{
//取出建立好连接的套接字
tcpSocket=tcpServer->nextPendingConnection();
QString ip=tcpSocket->peerAddress().toString();//获取对方的IP
qint16 port=tcpSocket->peerPort();//获取对方的端口号
QString temp=QString("[%1 %2]:成功连接").arg(ip).arg(port);
ui->textEditRead->setText(temp);
})
(4)在UI界面选择发送按钮,右键选择转到槽函数,使得能够通过按钮实现获取编辑器的内容以及清除编辑器的内容,以此实现相应的功能;
(5)判断是否建立套接字成功,如果不是则进行return返回,并进行输出“服务端断开,请重新连接”的信息,不然则发送textEditWrite里面的内容。使用tcpsocket的disconnectFrom Host和close函数进行断开。
if(NULL == tcpSocket)
{
return;
}
tcpSocket->write("服务端断开,请重新连接");
//主动和客户端端口连接
tcpSocket->disconnectFromHost();
tcpSocket->close();
客服端建立通信
(1)在客户端中需要用到通信套接字,则首先在client.h中定义通信套接字;
QTcpSocket *tcpSocket; //通信套接字
(2)在client.h中定义的通信套接字变量需要在client.cpp中进行初始化,赋值为NULL,同时通信套接字进行分配空间,指定父对象;
tcpSocket = NULL;
//分配空间,指定父对象
tcpSocket = new QTcpSocket(this);
(3)当有服务器端与客户端连接时,使用connect函数进行连接,建立通信套接字进行通讯,并打印“成功和服务器建立好连接”的信息,获取对方发送的数据内容,并追加到编辑器中;
connect(tcpSocket, &QTcpSocket::connected,
[=]()
{
ui->textEditRead->setText("成功和服务器建立好连接");
});
(4)通过定义ip和port变量并利用lineEdit部件进行获取IP号和端口号,利用connectToHost函数主动实现与服务器建立连接;
//获取服务器IP和端口
QString ip = ui->lineEditIP->text();
qint16 port = ui->lineEditPort->text().toInt();
//主动和服务器建立连接
tcpSocket->connectToHost(QHostAddress(ip), port);
(5)在UI界面选择发送按钮,右键选择转到槽函数,获取编辑框的内容,通过write进行数据写入、read进行数据读取并进行发送,在此过程中将数据编码为Utf-8,以防出现乱码现象,最后清除编辑框的内容;
//获取编辑框内容
QString str = ui->textEditWrite->toPlainText();
//发送数据
tcpSocket->write( str.toUtf8().data() );
//清除编辑区内容
ui->textEditWrite->clear();
(6)数据传输完成后使用tcpsocket通信套接字的disconnectFrom Host和close函数主动进行断开连接。
//主动和对方断开连接
tcpSocket->write("客户端已断开");
tcpSocket->disconnectFromHost();
tcpSocket->close();
「?? 感谢大家」
如果你觉得这篇内容对你挺有有帮助的话:
- 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
- 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
- 觉得不错的话,也可以阅读近期梳理的文章(感谢各位的鼓励与支持):
- python开发之HighGUI上位机开发(一)(420+)
- python开发之HighGUI上位机开发(二)(680+)
- python开发(三)—项目实战:可变色画布和自制绘图板(580+)
- 教你用python操作Excel、Word、CSV,一文够了(160+)
- 教你用python轻松解析XML和PDF,一文够了,赶紧码住(210+)
- 电脑收藏的10个网站,知乎超100万人推荐,让你办公事半功倍(230+)
- 基于混沌Logistic加密算法的图片加密与还原(220+)
- 分享 | 36张不可思议的数学知识动图,让你对数学怦然心动(600+)
- 手把手教你进行pip换源(100+)
- 聊天小白震撼来临!快用python教她说话吧,你就不寂寞了(240+)
- 教你用python编写二十几行的代码绘制动态烟花(210+)
- Python之Matplotlib数据可视化一:简易线形图(310+)
- Python之Matplotlib可视化二:密度图与等高线图(330+)
- python之图像仿射变换分析:原理+图像平移(310+)
- 超全Python图像处理讲解(多图预警)(340+)
- python之仿射变换分析:图像旋转及数学原理推导(310+)
- Python实现对图像进行掩膜遮罩处理,超详细讲解(320+)
「?? 资源传送门」
1. 扫码关注【做一个柔情的程序猿】公众号
2. 在【做一个柔情的程序猿】后台回复 【python资料】【2020秋招】 获取相应资料
写道这太不容易了,跪了跪了。。。。。。。后面的内容包含客服端与服务器之间的文件交互以及完整代码。。。。
感谢大家持续关注!!!
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)