当前位置: 首页 > news >正文

QT基础篇(10)QT5网络与通信

QT5网络与通信是指在QT5开发环境中使用网络进行数据传输和通信的相关功能和技术。

QT5提供了一套完善的网络模块,包括了TCP、UDP、HTTP等协议的支持,可以方便地在QT应用程序中进行网络通信。通过QT5的网络模块,开发者可以实现客户端和服务器之间的数据传输、消息推送、远程控制等功能。

在QT5中,可以使用QTcpSocket类和QUdpSocket类来实现TCP和UDP协议的数据传输。QTcpSocket类提供了基于TCP协议的套接字接口,可以实现可靠的数据传输和连接管理;QUdpSocket类则提供了基于UDP协议的套接字接口,可以实现快速的数据传输和广播。

除了基本的TCP和UDP通信,QT5还提供了QNetworkAccessManager类和QNetworkRequest类来实现HTTP通信。QNetworkAccessManager类是QT5中的HTTP客户端类,可以实现HTTP请求和响应的处理;QNetworkRequest类用于表示HTTP请求的相关信息,如URL地址、请求头等。

此外,QT5还提供了一些其他的网络相关类和功能,如QTcpServer类用于实现TCP服务器端的功能、QSslSocket类用于实现安全的网络通信、QWebSocket类用于实现WebSocket协议的通信等。

总之,QT5网络与通信提供了一套简单易用、功能丰富的网络编程接口,使得开发者可以方便地在QT应用程序中实现各种网络通信功能。

1.获取本机网络信息

在QT5中,可以使用QNetworkInterface类来获取本机的网络信息。QNetworkInterface类提供了一组静态函数用于查询本机的网络接口信息,如IP地址、MAC地址等。

以下是一个示例代码,展示如何使用QNetworkInterface类获取本机网络信息:

#include <QtNetwork>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 获取本机的网络接口列表QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();// 遍历网络接口列表foreach (QNetworkInterface interface, interfaceList) {// 输出网络接口的名称和硬件地址(MAC地址)qDebug() << "Interface name:" << interface.name();qDebug() << "Hardware address (MAC):" << interface.hardwareAddress();// 获取接口的IP地址列表QList<QNetworkAddressEntry> addressList = interface.addressEntries();foreach (QNetworkAddressEntry entry, addressList) {// 输出IP地址和子网掩码qDebug() << "IP address:" << entry.ip().toString();qDebug() << "Netmask:" << entry.netmask().toString();}qDebug() << "------------------------------------";}return a.exec();
}

上述代码使用QNetworkInterface::allInterfaces()函数获取本机的所有网络接口列表,然后通过遍历列表,获取每个网络接口的名称、硬件地址(MAC地址)、IP地址等信息,并进行输出展示。

注意,要使用QT的网络模块,需要在.pro文件中添加QT += network声明,以添加网络模块的依赖。

运行上述代码,即可获取到本机的网络信息,并进行输出展示。

2.基于UDP的网络广播程序
2.1 UDP工作原理

UDP(User Datagram Protocol)是一种无连接的传输层协议,它在网络通信中提供了一种简单的、不可靠的数据传输方式。与TCP相比,UDP不提供可靠的传输和重发机制,也没有流量控制和拥塞控制。UDP主要用于那些对实时性要求较高,对数据丢失不敏感的应用场景,如音视频传输、在线游戏等。

UDP的工作原理如下:

  1. 建立UDP套接字:在数据传输之前,发送方和接收方需要分别创建UDP套接字(socket)。套接字是网络通信的端点,用于发送和接收数据。

  2. 发送数据报文:发送方将待发送的数据封装成一个数据报,并通过UDP套接字发送出去。数据报由目标IP地址和端口号标识。

  3. 数据报文传输:UDP将数据报直接传输给目标主机,不进行可靠性保证和流量控制。数据报可能会被网络中的路由器丢失、延迟或重排序。

  4. 数据报文接收:接收方的UDP套接字接收到数据报后,将其解析为原始数据,并提供给应用程序使用。

UDP的特点和适用场景:

  • 无连接:UDP在通信前不需要进行握手和建立连接,因此可以更快地发送数据。
  • 不可靠:数据报可能会丢失、重复、乱序传输,因为UDP不提供重发和确认机制。
  • 尽力而为:UDP尽最大努力交付数据,但不能保证数据的可靠性和按序性。
  • 适用于实时性要求高、数据丢失不敏感的应用场景,如音视频传输、实时游戏等。

总结:UDP是一种简单、高效的传输协议,适用于实时性要求较高、对数据丢失不敏感的应用场景。它不提供可靠性保证和流量控制,但传输速度快,延迟低。

2.2  UDP编程模型

UDP编程模型是一种用于在应用程序中实现UDP通信的方式。UDP编程模型主要包括以下几个步骤:

  1. 创建UDP套接字:在应用程序中创建一个UDP套接字,套接字是进行网络通信的端点,用于发送和接收数据。

  2. 绑定套接字:将套接字绑定到一个特定的本地IP地址和端口号上。这样,套接字就可以接收来自该IP地址和端口号的数据。

  3. 发送数据:通过UDP套接字发送数据报文。发送时,需要指定目标IP地址和端口号。

  4. 接收数据:通过UDP套接字接收数据报文。可以使用非阻塞模式或阻塞模式进行接收。

  5. 处理接收的数据:应用程序处理接收到的数据报文,解析其中的数据并进行相关的处理。

  6. 关闭套接字:完成UDP通信后,应用程序需要关闭套接字释放资源。

在实际的UDP编程中,可以使用不同的编程语言和框架来实现UDP通信。例如,使用C语言可以使用socket API来创建和管理UDP套接字,使用Python可以使用socket模块来进行UDP编程,使用Qt框架可以使用QUdpSocket类来实现UDP通信等。

总结:UDP编程模型包括创建UDP套接字、绑定套接字、发送和接收数据以及处理数据的过程。通过使用不同的编程语言和框架,可以实现UDP通信并进行相应的数据处理。

2.3 UDP服务器编程

在QT5中,可以使用QUdpSocket类来实现UDP服务器端的编程。以下是一个基本的QT5 UDP服务器端编程的示例:

#include <QtNetwork>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个QUdpSocket对象QUdpSocket udpSocket;// 绑定服务器的IP地址和端口号udpSocket.bind(QHostAddress::AnyIPv4, 1234);// 当有数据到达时触发readyRead()函数QObject::connect(&udpSocket, &QUdpSocket::readyRead, [&](){while (udpSocket.hasPendingDatagrams()) {// 读取接收到的数据报文QByteArray datagram;datagram.resize(udpSocket.pendingDatagramSize());udpSocket.readDatagram(datagram.data(), datagram.size());// 处理接收到的数据,这里简单打印出数据内容qDebug() << "Received data: " << datagram;}});return a.exec();
}

在上面的代码中,首先创建一个QUdpSocket对象udpSocket,然后使用bind()函数将其绑定到服务器端的IP地址和端口号上(这里使用了任意IPv4地址和端口号1234)。接下来,使用QObject的connect()函数将udpSocket的readyRead信号连接到一个lambda函数,该函数会在有数据到达时被触发。在lambda函数中,通过udpSocket的pendingDatagramSize()函数获取待处理数据报文的大小,并使用readDatagram()函数读取数据报文的内容。最后,可以根据业务需求进行对接收数据的处理。

请注意,以上示例仅为演示UDP服务器端的基本逻辑,实际的服务器端编程可能还需要处理各种异常情况,进行错误处理,以及向客户端发送响应等。

2.4 UDP客户端编程

在QT5中,可以使用QUdpSocket类来实现UDP客户端的编程。以下是一个基本的QT5 UDP客户端编程的示例:

#include <QtNetwork>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个QUdpSocket对象QUdpSocket udpSocket;// 发送数据报文到服务器端QByteArray datagram = "Hello, server!";udpSocket.writeDatagram(datagram, QHostAddress("127.0.0.1"), 1234);// 当有数据到达时触发readyRead()函数QObject::connect(&udpSocket, &QUdpSocket::readyRead, [&](){while (udpSocket.hasPendingDatagrams()) {// 读取接收到的数据报文QByteArray datagram;datagram.resize(udpSocket.pendingDatagramSize());udpSocket.readDatagram(datagram.data(), datagram.size());// 处理接收到的数据,这里简单打印出数据内容qDebug() << "Received data: " << datagram;}});return a.exec();
}

在上面的代码中,首先创建一个QUdpSocket对象udpSocket。然后,使用writeDatagram()函数向服务器端发送数据报文,其中datagram是要发送的数据,QHostAddress("127.0.0.1")是服务器的IP地址,1234是服务器的端口号。接下来,使用QObject的connect()函数将udpSocket的readyRead信号连接到一个lambda函数,该函数会在有数据到达时被触发。在lambda函数中,通过udpSocket的pendingDatagramSize()函数获取待处理数据报文的大小,并使用readDatagram()函数读取数据报文的内容。最后,可以根据业务需求进行对接收数据的处理。

请注意,以上示例仅为演示UDP客户端的基本逻辑,实际的客户端编程可能还需要处理各种异常情况,进行错误处理,以及定时发送数据等。

3.基于TCP的网络聊天室程序
3.1 TCP工作原理

TCP(Transmission Control Protocol)是一种可靠的、面向连接的传输层协议,用于在网络上传输数据。它提供了以下主要功能:

  1. 连接建立:在通信双方之间建立一个可靠的连接,形成一个数据传输通道。

  2. 可靠性:通过使用序列号、确认应答、重传机制等,确保数据的可靠传输。如果数据丢失或损坏,TCP会要求对方重新发送。

  3. 拥塞控制:通过动态调整发送速率,避免网络拥塞,保持良好的网络性能。

  4. 面向字节流:TCP把数据看作是一连串的无结构的字节流,没有明确的数据报文边界。TCP会保持字节的顺序,并对字节进行分割和重组。

  5. 流量控制:通过滑动窗口机制,控制发送方的发送速率,使接收方能够及时处理接收到的数据。

  6. 超时重传:如果一段时间内没有收到对方的确认应答,TCP会重新发送之前发送的数据。

TCP的工作原理如下:

  1. 三次握手建立连接:

    • 客户端发送一个SYN(同步)报文给服务端,请求建立连接。
    • 服务端接收到SYN报文后,回复一个SYN+ACK(同步+确认)报文,表示同意建立连接。
    • 客户端收到服务端的SYN+ACK报文后,再回复一个ACK(确认)报文,建立连接。
  2. 数据传输:

    • 连接建立后,可以进行数据的传输。客户端通过发送数据报文给服务端,服务端接收到数据后进行处理。
    • 数据报文按序列号分割成报文段,并发送给接收方。
    • 接收方收到报文段后,根据序列号进行排序和重组,然后交给应用层进行处理。
  3. 连接释放:

    • 当数据传输结束后,或者发生异常情况时,需要关闭连接。
    • 一方发送一个FIN(结束)报文给对方,表示要关闭连接。
    • 接收方收到FIN报文后,回复一个ACK报文进行确认。
    • 接收方也可以发送一个FIN报文给发送方,表示同意关闭连接。
    • 最后,发送方收到ACK报文后,连接关闭。

通过以上的握手和释放过程,TCP协议可以确保可靠的数据传输,并提供了流量控制和拥塞控制机制,使得数据在网络上能够高效、可靠地传输。

3.2 TCP编程模型

TCP编程模型是一种基于TCP协议的网络编程模型,用于实现网络应用程序的通信。它包括以下几个步骤:

  1. 创建Socket:在客户端和服务器端分别创建一个Socket对象,用于建立连接并进行数据的传输。客户端需要指定服务器的IP地址和端口号,而服务器只需指定一个监听的端口号。

  2. 建立连接:客户端通过调用Socket对象的connect()方法,向指定的服务器地址和端口号发起连接请求。如果连接成功,客户端和服务器端都会创建一个TCP连接。

  3. 数据发送和接收:连接建立后,客户端和服务器端可以通过Socket对象的send()和recv()方法来发送和接收数据。客户端可以将需要发送的数据通过send()方法发送给服务器端,而服务器则通过recv()方法接收客户端发送的数据。

  4. 关闭连接:当通信结束后,客户端和服务器端均需要调用Socket对象的close()方法来关闭连接。

在TCP编程模型中,客户端和服务器端的代码逻辑有所不同:

客户端代码逻辑:

  1. 创建Socket对象;
  2. 连接服务器;
  3. 发送数据;
  4. 接收数据;
  5. 关闭连接。

服务器端代码逻辑:

  1. 创建Socket对象;
  2. 绑定监听端口;
  3. 进入监听状态,等待客户端连接;
  4. 接收连接请求;
  5. 接收数据;
  6. 发送数据;
  7. 关闭连接。

需要注意的是,TCP编程模型是基于阻塞IO的,即当一个操作被执行时,程序会一直等待该操作完成后再继续执行下一步操作。如果需要实现非阻塞IO,可以使用多线程或异步IO等方式来实现。

3.3 TCP服务器编程

在QT5中编写TCP服务器程序的步骤如下:

  1. 导入所需的QT相关模块:
#include <QTcpServer>
#include <QTcpSocket>

  1. 创建QTcpServer对象和QTcpSocket对象:
QTcpServer *server = new QTcpServer;
QTcpSocket *socket;

  1. 监听客户端连接请求并处理:
bool success = server->listen(QHostAddress::Any, 1234); // 监听任意地址的1234端口
if(!success) {// 监听失败的处理逻辑
}// 当有客户端连接请求时,执行连接事件的处理函数
connect(server, &QTcpServer::newConnection, [=]() {socket = server->nextPendingConnection(); // 接受连接请求并返回一个新的socket对象// 连接建立成功的处理逻辑// 处理接收到的数据connect(socket, &QTcpSocket::readyRead, [=]() {QByteArray data = socket->readAll(); // 读取接收到的数据// 处理接收到的数据的逻辑});// 处理连接断开connect(socket, &QTcpSocket::disconnected, [=]() {socket->deleteLater(); // 删除socket对象});
});

  1. 在需要发送数据时,使用QTcpSocket对象来发送数据:
socket->write("Hello, client!");// 发送数据

  1. 关闭服务器:
server->close();

注:以上代码只是简单的示例,实际应用中需根据具体情况进行修改和完善。

3.4 TCP客户端编程

在QT5中编写TCP客户端程序的步骤如下:

  1. 导入所需的QT相关模块:
#include <QTcpSocket>

  1. 创建QTcpSocket对象:
QTcpSocket *socket = new QTcpSocket;

  1. 连接到服务器:
socket->connectToHost("服务器IP", 1234); // 连接到服务器的IP和端口号
if(socket->waitForConnected()) {// 连接成功的处理逻辑
} else {// 连接失败的处理逻辑
}

  1. 处理接收到的数据:
connect(socket, &QTcpSocket::readyRead, [=]() {QByteArray data = socket->readAll(); // 读取接收到的数据// 处理接收到的数据的逻辑
});

  1. 在需要发送数据时,使用QTcpSocket对象来发送数据:
socket->write("Hello, server!"); // 发送数据

  1. 关闭连接:
socket->close();

注:以上代码只是简单的示例,实际应用中需根据具体情况进行修改和完善。

4.QT网络应用开发初步
4.1 简单网页浏览器

在QT5中编写一个简单的网页浏览器,需要使用QT的QWebEngineView类来显示网页内容。以下是一个基本的示例:

  1. 导入所需的QT相关模块:
#include <QApplication>
#include <QWebEngineView>

  1. 创建一个QWebEngineView对象并设置其大小和标题:
QWebEngineView *view = new QWebEngineView;
view->resize(800, 600); // 设置窗口大小
view->setWindowTitle("Simple Web Browser"); // 设置窗口标题

  1. 加载网页:
view->load(QUrl("http://www.example.com")); // 加载指定网页

  1. 显示窗口:
view->show(); // 显示窗口

  1. 运行应用程序:
return QApplication::exec(); // 运行QT应用程序的事件循环

完整的示例代码如下:

#include <QApplication>
#include <QWebEngineView>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWebEngineView *view = new QWebEngineView;view->resize(800, 600);view->setWindowTitle("Simple Web Browser");view->load(QUrl("http://www.example.com"));view->show();return QApplication::exec();
}

可以根据需要修改网页的URL和窗口大小等参数。编译运行该示例代码,即可打开一个简单的网页浏览器窗口,并加载指定的网页。

4.2 文件下载实例

在QT5中实现文件下载可以使用QNetworkAccessManagerQNetworkReply类。以下是一个简单的示例:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QFile>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QString url = "https://www.example.com/file.txt"; // 下载文件的URLQString savePath = "/path/to/save/file.txt"; // 保存文件的路径QNetworkAccessManager manager;QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(url)));// 连接下载完成的信号QObject::connect(reply, &QNetworkReply::finished, [&a, reply, savePath]() {if (reply->error() == QNetworkReply::NoError) {QFile file(savePath);if (file.open(QIODevice::WriteOnly)) {file.write(reply->readAll());file.close();qDebug() << "File downloaded successfully.";} else {qDebug() << "Failed to open file for writing.";}} else {qDebug() << "Download failed:" << reply->errorString();}reply->deleteLater();a.quit();});return a.exec();
}

在上面的示例中,我们创建了一个QNetworkAccessManager对象,并使用get()函数发起一个GET请求来下载文件。然后,我们连接QNetworkReply对象的finished()信号,当下载完成时,会触发该信号,我们在该信号的槽函数中将文件保存到指定的路径。如果下载过程中出错,我们会输出错误信息。最后,我们调用a.quit()来退出应用程序。

请注意将https://www.example.com/file.txt替换为实际的文件下载链接,并将/path/to/save/file.txt替换为文件保存的实际路径。

编译运行该示例代码,即可实现文件下载功能。

相关文章:

QT基础篇(10)QT5网络与通信

QT5网络与通信是指在QT5开发环境中使用网络进行数据传输和通信的相关功能和技术。 QT5提供了一套完善的网络模块&#xff0c;包括了TCP、UDP、HTTP等协议的支持&#xff0c;可以方便地在QT应用程序中进行网络通信。通过QT5的网络模块&#xff0c;开发者可以实现客户端和服务器…...

【Leetcode】269.火星词典(Hard)

一、题目 1、题目描述 现有一种使用英语字母的火星语言,这门语言的字母顺序与英语顺序不同。 给你一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序…...

opencv_模型训练

文件夹 opencv训练文件 xml negdataposdata 说明 negdata目录: 放负样本的目录 posdata目录&#xff1a; 放正样本的目录 xml目录&#xff1a; 新建的一个目录&#xff0c;为之后存放分类器文件使用 neg.txt: 负样本路径列表 pos.txt: 正样本路径列表 pos.vec: 后续自动生成…...

python PyQt5的学习

一、安装与配置 1、环境&#xff1a; python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器&#xff0c;便于ui的设计 界面是这样的&#xff1a…...

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…...

计算机硬件 5.2组装整机

第二节 组装整机 一、准备工作 1.常用工具&#xff1a;中号十字螺丝刀、尖嘴钳、软毛刷、防静电手环等。 2.组装原则&#xff1a; ①按“先小后大”“从里到外”的顺序进行&#xff0c;不遗漏每一环节&#xff0c;不“带病”进行下一环节。 ②合理使用工具器材&#xff0c;…...

Docker搭建MySQL主从数据库-亲测有效

1、测试环境概述 1、使用MySQL5.7.35版本 2、使用Centos7操作系统 3、使用Docker20版本 案例中描述了整个测试的详细过程 2、安装Docker 2.1、如果已经安装docker,可以先卸载 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-l…...

PyTorch 中的距离函数深度解析:掌握向量间的距离和相似度计算

目录 Pytorch中Distance functions详解 pairwise_distance 用途 用法 参数 数学理论公式 示例代码 cosine_similarity 用途 用法 参数 数学理论 示例代码 输出结果 pdist 用途 用法 参数 数学理论 示例代码 总结 Pytorch中Distance functions详解 pair…...

【Vue技巧】vue3中不支持.sync语法糖的解决方案

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在 Vue 3 中&#xff0c;.sync 修饰符已经被移除。在 Vue 2 中&#xff0c;.sync 修饰符是一个语法糖&#xff0c;用于简化子组件和父组件之间的双向数据绑定。在 Vue 3 中&#x…...

设计模式⑦ :简单化

文章目录 一、前言二、Facade 模式1. 介绍2. 应用3. 总结 三、Mediator 模式1. 介绍2. 应用3. 总结 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容…...

Java:选择哪个Java IDE好?

Java&#xff1a;选择哪个Java IDE好? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…...

unity打包apk后网络请求提示unknown error处理

近期同事的一个比较老的版本的unity项目在电脑上运行都正常&#xff0c;但是打包成android后安装到手机上就提示unknown error 让我帮他排查一下问题。由于是涉密项目不能发图就简单介绍下处理过程吧&#xff01; 一、故障原因 请求的地址ssl证书过期了。 二、处理过程 更改请…...

力扣 | 11. 盛最多水的容器

双指针解法–对撞指针 暴力解法public int maxArea1(int[] height) {int n height.length;int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int area Math.min(height[i], height[j]) * (j - i);ans Math.max(ans, area);}}return ans;}双指针解法…...

史上最全EasyExcel

一、EasyExcel介绍 1、数据导入&#xff1a;减轻录入工作量 2、数据导出&#xff1a;统计信息归档 3、数据传输&#xff1a;异构系统之间数据传输 二、EasyExcel特点 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内…...

MySQL---事务的四大特性详解(高频面试题)

在MySQL中&#xff0c;事务具有以下四个基本特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。这些特性通常被称为ACID特性。 一…...

为 OpenCV 编写文档(二)

常用命令 这里通过简短的示例描述了最常用的 doxygen 命令。有关可用命令的完整列表和详细说明&#xff0c;请访问命令参考。 基本命令 brief - 带有简要实体描述的段落 param - 函数参数的描述。 多个相邻语句合并到一个列表中。如果在实际函数签名中找不到具有此名称的参数…...

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接&#xff1a;https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码&#xff1a;8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式&#xff1a;esd/wim/swm 安装方式&#xf…...

机器学习:holdout法(Python)

import pandas as pd import numpy as np from sklearn.preprocessing import LabelEncoder, StandardScaler # 类别标签编码&#xff0c;标准化处理 from sklearn.decomposition import PCA # 主成分分析 import matplotlib.pyplot as plt from sklearn.model_selection impor…...

【GaussDB数据库】序

参考链接1&#xff1a;国产数据库华为高斯数据库&#xff08;GaussDB&#xff09;功能与特点总结 参考链接2&#xff1a;GaussDB(DWS)介绍 GaussDB简介 官方网站&#xff1a;云数据库GaussDB GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务&#xff0c;…...

代码随想录算法训练营第三十八天|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

题目&#xff1a;理论基础 文章链接&#xff1a;代码随想录 视频链接&#xff1a;动态规划理论基础 动态规划五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目&#xff1a;509. 斐…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...