网盘——客户端服务器搭建

1、配置文件加载

资源文件

将服务器IP和PORT信息填入配置文件中

将配置文件作为资源文件添加到资源文件中

程序运行时加载配置文件中的数据

1.1、首先在创建好的代码目录下面创建一个配置文件

代码目录怎么找到的呢?

1.2、在这个路径下面,创建一个 文本文件,将ip和端口号写进去

1.3、将该文件作为资源文件添加进来

A、右键项目,Add New或者直接Ctrl+N

B、点击Qt——Qt Resource File——点击choose

C、写上自己的名称

D、将配置文件添加到项目里面来

 1.4、使用QFile头文件,通过QFile产生类对象,打开文件

 QFile file(":/client.config");

1.5、打开之后将所有的数据读取出来,转换成字符串

QByteArray baData = file.readAll()

 1.6、将换行\r\n等用空格进行替换

strData.replace("\r\n", " ");

1.7、使用空格对文本进行剪切

        //按照空格进行切分--是一个字符串列表QStringList strList =  strData.split(" ");

1.8、将ip和端口号放到成员变量里面来

 m_strIP = strList.at(0);//端口现在是字符串,现在得转换成无符号的整型
m_usPort = strList.at(1).toUShort();

总的代码

void TcpClient::loadConfig()
{QFile file(":/client.config");if(file.open(QIODevice::ReadOnly)){QByteArray baData = file.readAll();//将字节转换成字符串//c_str()将首地址转换成char*类型的QString strData = baData.toStdString().c_str();//        qDebug()<<strData;file.close();//切分字符串strData.replace("\r\n", " ");//qDebug()<<strData;//按照空格进行切分--是一个字符串列表QStringList strList =  strData.split(" ");//切分完成之后打印一下//        for(int i=0; i<strList.size(); i++){//            qDebug()<<"------>"<<strList[i];//        }m_strIP = strList.at(0);//端口现在是字符串,现在得转换成无符号的整型m_usPort = strList.at(1).toUShort();qDebug()<<"ip"<<m_strIP <<"port"<<m_usPort;}else {QMessageBox::critical(this, "open config", "open config failed");}
}

备注:

A、记得在.h文件里面的私有变量里面定义成员变量

    QString m_strIP;quint16 m_usPort;

B、在.h文件public里定义函数

void loadConfig();

C、在.cpp文件里面调用定义的函数,要不然不现实的哦

loadConfig();

2、产生socket

通过m_tcpSocket连接服务器,与服务器之间进行数据交互

2.1、在.h头文件里面引入QTcpSocket, 通过TCPsocket来连接服务器和收发服务器数据

#include <QTcpSocket>

2.2、在.h文件下创建私有对象

QTcpSocket m_tcpSocket;

2.3、在构造函数里面直接进行服务器连接

这里使用了QHostAddress对象,所以也得引用头文件

#include <QHostAddress>
//连接服务器m_tcpSocket.connectToHost(QHostAddress(m_strIP), m_usPort);

2.4、查看是否发送成功

A、在头文件添加槽函数

public slots://查看是否服务器连接成功void showConfig();

B、在cpp里面添加定义

void TcpClient::showConfig()
{QMessageBox::information(this, "连接服务器", "连接服务器成功");
}

C、将信号和信号的处理函数关联起来connect

信号的的发送者m_tcpSocket,发出连接的信号,信号的接收方,用showConfig()函数来处理。

后面只要发送这个信号,他就会调用showConfig()函数来处理

 connect(&m_tcpSocket, SIGNAL(connected()), this, SLOT( showConfig()));v

3、写服务器

新建一个项目TcpServer

3.1、首先跟上面一样,进行配置文件的加载

3.2、监听——通过TcpServer来监听

QTcpServer派生,监听及接收客户端的连接

QTcpServer派生, 和客户端数据交互

A、继承TCpServer,产生一个派生类

B、在mytcpserver.h里面引入头文件

#include <QTcpServer>

注意:为了让他支持信号槽,必须在类的最开始写Q_OBJECT,作为QTcpServer的基类

class MyTcpServer : public QTcpServer
{//为了让他支持信号槽,必须在类的最开始写Q_OBJECT,作为QTcpServer的基类Q_OBJECT
public:MyTcpServer();
}

C、定义一个单例模式,写一个静态的成员函数,这个成员函数返回值是MyTcpServer的引用,函数命叫做getInstance

//单例模式static MyTcpServer &getInstance();

D、添加函数定义 

到后面凡是需要用到MyTcpServer的时候,直接通过类名getInstance获得静态的局部对象来进行操作,无论调用多少次,有且仅有一个对象

MyTcpServer &MyTcpServer::getInstance()
{//到后面凡是需要用到MyTcpServer的时候,直接通过类名getInstance获得静态的局部对象来进行操作,无论调用多少次,有且仅有一个对象static MyTcpServer instance;return instance;
}

E、在mytcpserver产生的对象,然后在tcpserver用这个对象来监听和接收客户端的连接

MyTcpServer::getInstance().listen(QHostAddress(m_strIP), m_usPort);

F、Tcpserver监听之后,怎么直到监听成功了呢?一旦有客户端过来,他就会自动去调用incomingConnection

函数定义

void incomingConnection(qintptr socketDescriptor);
void MyTcpServer::incomingConnection(qintptr socketDescriptor)
{//只要有客户端连接过来了就打印一下qDebug()<<"new client connected";
}

G、运行一下,只要有客户端连接过来了,那么我们就打印一下

4、总结

加载配置文件之后,在客户端产生一个socket,通过socket连接服务器,成功连接服务器会发出connected()信号,通过槽函数,借此判断是否成功连接服务器。

服务器跟客户端不一样,他首先需要有一个TcpServer进行监听,在监听之前,先加载配置文件,之后使用MyTcpServer进行监听,只要客户端有连接过来的话,就会自动调用incomingConnection函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS-枚举说明

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Color 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 颜色名称颜色值颜色示意Black0x000000 Blue0x0000ff Brown…

STM32 | Systick定时器(第四天)

STM32 第四天 一、Systick定时器 1、定时器概念 定时器:是芯片内部用于计数从而得到时长的一种外设。 定时器定时长短与什么有关???(定时器定时长短与频率及计数大小有关) 定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ 定时器定时时间:计数个数…

NLP 笔记:Latent Dirichlet Allocation (介绍篇)

1 问题介绍 假设我们有一堆新闻&#xff0c;每个新闻都有≥1个主题 我们现在只知道新闻的内容&#xff0c;我们希望一个算法&#xff0c;帮我们把这些新闻分类成主题人类可以根据每个每个文章里面的单词判断主题&#xff0c;那计算机怎么做呢&#xff1f; ——>LDA(Latent D…

利用免费 GPU 部署体验大型语言模型推理框架 vLLM

vLLM简介 vLLM 是一个快速且易于使用的 LLM&#xff08;大型语言模型&#xff09;推理和服务库。 vLLM 之所以快速&#xff0c;是因为&#xff1a; 最先进的服务吞吐量 通过 PagedAttention 高效管理注意力键和值内存 连续批处理传入请求 使用 CUDA/HIP 图快速模型执行 量…

clang-query 的编译安装与使用示例

1&#xff0c;clang query 概述 作用&#xff1a; 检查一个程序源码的抽象语法树&#xff0c;测试 AST 匹配器&#xff1b; 帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配&#xff1b; 2&#xff0c;clang-query 安装 准备&#xff1a; git clone --recursive https://git…

Linux详细介绍

Linux操作系统介绍 Linux 是一种开源的类 Unix 操作系统&#xff0c;最初由 Linus Torvalds 在 1991 年创建。与其他操作系统不同&#xff0c;Linux 是一个基于内核的操作系统&#xff0c;其核心是 Linux 内核。Linux 内核是由程序员社区不断开发和改进的&#xff0c;它提供了…

【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】

yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…

Hive SQL必刷练习题:排列组合问题【通过join不等式】

排列组合问题【通过join不等式】 这种问题&#xff0c;就是数学的排列不等式&#xff0c;一个队伍只能和其余队伍比一次&#xff0c;不能重复 方法1&#xff1a;可以直接通过join&#xff0c;最后on是一个不等式【排列组合问题的解决方式】 方法2&#xff1a;也可以是提前多加…

IAB欧洲发布首张泛欧洲数字零售媒体能力矩阵图

2024年1月18日&#xff0c;互动广告署-欧洲办事处&#xff08;IAB Europe)发布了首张泛欧洲数字零售媒体能力矩阵图。为媒体买家提供的新资源概述了在欧洲运营的零售商提供的现场、场外和数字店内零售媒体广告机会。 2024年1月18日&#xff0c;比利时布鲁塞尔&#xff0c;欧洲领…

【深度学习】神经网络教程

文章目录 安装python环境熟悉Python安装torch 安装python环境 有解释器&#xff1a; 设置环境&#xff1a; 熟悉Python var1 1 # 整型 var2 1.1 # 浮点型 var3 1 2j # 复数 var4 hello # 字符串 var5 True # 布尔型 var6 [1, 2, 3] # 列表List var7 (1, 2, 3)…

PHP 读取嵌入式数据 SQLite3

SQLite3 属于轻量级开源的嵌入式关系型数据库&#xff0c;但它支持 ACID(Atomicity,Consistency,Isolation,Durability) 事务。 SQLite Download Page: https://www.sqlite.org/download.html 第一步&#xff1a;在 php.ini 中开启 extensionsqlite3 第二步&#xff1a;连接数…

保研复习概率论1

1.什么是随机试验&#xff08;random trial&#xff09;&#xff1f; 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知&#xff08;或者是可知这个范围&#xff09;、每一次试验前会出现哪个结果事先并不确定&#xff0c;那么试验称为随机试验。 …

JVM——运行时数据区

前言 由于JAVA程序是交由JVM执行的&#xff0c;所以我们所说的JAVA内存区域划分也是指的JVM内存区域划分&#xff0c;JAVA程序具体执行的过程如下图所示。首先Java源代码文件会被Java编译器编译为字节码文件&#xff0c;然后由JVM中的类加载器加载各个类的字节码文件&#xff0…

部标JT808车辆定位监控平台单服务器13.6万接入压力测试记录(附源码)

之前经常有人问平台能支持多少设备同时在线&#xff0c;由于事情多没时间做。最近刚好有机会做下压力测试。在不间断的连续压测三天&#xff0c;最终结果为13.6万TCP连接&#xff0c;30秒上报频率。 一、测试目的 测试平台同时接入设备数量与并发处理能力。 二、准备环境 一…

ubuntu arm qt 读取execl xls表格数据

一&#xff0c;ubuntu linux pc编译读取xls的库 1&#xff0c;安装libxls(读取xls文件 电脑版) 确保你已经安装了基本的编译工具&#xff0c;如gcc和make。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-update sudo apt-get install build-essentia…

principles and practices of interconnection networks. preface

preface 首先两个介绍章节&#xff0c;然后分为拓扑、路由、流量控制、路由器体系结构和性能五部分 第 1 章开始&#xff0c;描述什么是互连网络、如何使用它们、不同应用的性能要求以及如何选择拓扑结构。路由和流量控制就是为了满足这些要求。为了使这些概念具体化并激发本书…

前端学习之css media查询、自定义字体、过度动画、css变换、动画、渐变、多列、字体图标

media查询 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>media查询</title><!-- media查询&#xff1a;根据设备类型不同&#xff1a;比如说打印机、屏幕不同而产生不一样效果格式&#x…

Kubernetes kafka系列 | Strimzi 快速部署kafka集群 (可外部通信)

一、Strimzi介绍 Strimzi 是一个用于 Apache Kafka 在 Kubernetes 上部署和管理的开源项目。它提供了一组 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)、控制器和操作符,使得在 Kubernetes 环境中轻松地部署、管理和操作 Kafka 集群成为可能。Strimzi 项…

STM32 CAN的位时序和波特率

STM32 CAN的位时序和波特率 位时序 STM32的CAN外设位时序中只包含3段&#xff0c;分别是同步段SYNC_SEG、位段BS1及位段BS2&#xff0c;采样点位于BS1及BS2段的交界处。其中SYNC_SEG段固定长度为1Tq&#xff0c;而BS1及BS2段可以在位时序寄存器CAN_BTR设置它们的时间长度&…

阿里云2核4G服务器优惠价格30元、165元和199元1年,轻量和ECS

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…