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

用QT做一个网络调试助手

文章目录

  • 前言
  • 一、TCP网络调试助手介绍
    • 1. 项目概述
    • 2. 开发流程
    • 3. TCP服务器的关键流程
    • 4. TCP客户端的关键流程
  • 二、实现UI界面
    • 1. 服务器界面
    • 2. 客户端界面
  • 三、实现代码框架
    • 1. 服务器代码
      • 1.1 初始化服务器地址
      • 1.2 开始监听
      • 1.3 与客户端连接
      • 1.4 接收客户端信息
      • 1.5 判断客户端状态(连接或断开)
      • 1.6 停止监听或断开退出
      • 1.7 显示连接多个客户端
      • 1.8 给多个客户端发消息
    • 2. 客户端代码
      • 2.1 连接服务器
      • 2.2 断开服务器
      • 2.3 自定义文本颜色
      • 2.4 实现收发数据

前言

完整代码:网络调试助手

一、TCP网络调试助手介绍

1. 项目概述

用 QT 模拟网络调试助手的服务器和客户端,可以进行数据收发。

服务器:

image.png

客户端:

image.png

2. 开发流程

image.png

3. TCP服务器的关键流程

工程建立,需要在.pro加入网络权限:

image.png

创建一个基于 QTcpServer 的服务端涉及以下关键步骤:

  1. 创建并初始化 QTcpServer 实例:
    • 实例化 QTcpServer 。
    • 调用 listen 方法在特定端口监听传入的连接。
  2. 处理新连接:
    • 为 newConnection 信号连接一个槽函数。
    • 在槽函数中,使用 nextPendingConnection 获取 QTcpSocket 以与客户端通信。
  3. 读取和发送数据:
    • 通过连接 QTcpSocket 的 readyRead 信号来读取来自客户端的数据。
    • 使用 write 方法发送数据回客户端。
  4. 关闭连接:
    • 在适当的时候关闭 QTcpSocket 。

4. TCP客户端的关键流程

工程建立,需要在.pro加入网络权限:

image.png

创建一个基于 QTcpSocket 的Qt客户端涉及以下步骤:

  1. 创建 QTcpSocket 实例:
    • 实例化 QTcpSocket 。
  2. 连接到服务器:
    • 使用 connectToHost 方法连接到服务器的IP地址和端口。
  3. 发送数据到服务器:
    • 使用 write 方法发送数据。
  4. 接收来自服务器的数据:
    • 为 readyRead 信号连接一个槽函数来接收数据。
  5. 关闭连接:
    • 关闭 QTcpSocket 连接。

二、实现UI界面

1. 服务器界面

首先我们先放入两个文本编辑框 Text Edit,一个用来发送数据,一个用来接收数据,并放入一个发送按钮与下面的文本编辑框水平对齐:

image.png

接着我们再放入三个按钮分别为监听,停止监听,断开,设置水平布局:

image.png

然后再放入标签 Label,组合框 Combo Box,行编辑框 Line Edit,设置水平布局:

image.png

最后再放入一个组合框 Combo Box,整体垂直布局,修改间距,设置标题:

image.png

2. 客户端界面

首先我们先放入两个文本编辑框 Text Edit,一个用来发送数据,一个用来接收数据,并放入一个发送按钮与下面的文本编辑框水平对齐:

image.png

接着我们再放入两个按钮分别为连接和断开,并放入两个标签 Label 跟两个行编辑框 Line Edit设置水平布局:

image.png

最后再总体进行垂直布局,调整间距大小,设置标题:

image.png

三、实现代码框架

1. 服务器代码

实现服务器框架步骤:

  1. 初始化服务端地址
  2. 开始监听
  3. 与客户端连接
  4. 接收客户端信息
  5. 判断客户端状态(连接或断开)
  6. 停止监听或断开退出
  7. 新建MyComboBox,使用组合框,显示多个客户端连接(记得提升)
  8. 实现发送消息给客户端,通过索引发送多个

1.1 初始化服务器地址

查看QT提供的帮助手册:
image.png

代码示例:

#include <QTcpServer>
#include <QNetworkInterface>public:QTcpServer* server;Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);server = new QTcpServer(this);// 初始化服务器地址QList<QHostAddress> address = QNetworkInterface::allAddresses();for (QHostAddress tmp : address){if (tmp.protocol() == QAbstractSocket::IPv4Protocol){ui->comboBoxIP->addItem(tmp.toString());}}
}

程序运行结果:

image.png

1.2 开始监听

实现步骤:

  1. 设置端口号
  2. 开始监听

代码示例:

#include <QMessageBox>void Widget::on_btnListen_clicked()
{// 1. 设置端口号int port = ui->lineEditPort->text().toInt();// 2. 开始监听if (!server->listen(QHostAddress(ui->comboBoxIP->currentText()), port)){QMessageBox msgBox;msgBox.setWindowTitle("监听失败");msgBox.setText("端口号被占用");msgBox.exec();return;}ui->btnListen->setEnabled(false);ui->btnStopListen->setEnabled(true);ui->btnDisconnect->setEnabled(true);
}

程序运行结果:

image.png

1.3 与客户端连接

代码示例:

private slots:void on_newClient_connect();#include <QTcpSocket>void Widget::on_newClient_connect()
{if (server->hasPendingConnections()){// 从TcpSocket中获得客户端地址和端口号QTcpSocket *connection = server->nextPendingConnection();ui->textEditRecv->insertPlainText("客户端地址:" + connection->peerAddress().toString()+ "客户端端口号:" + QString::number(connection->peerPort()) + "\n");}
}

程序运行结果:

image.png

1.4 接收客户端信息

代码示例:

private slots:void on_readyRead_handler();void Widget::on_newClient_connect()
{if (server->hasPendingConnections()){// 从TcpSocket中获得客户端地址和端口号QTcpSocket *connection = server->nextPendingConnection();ui->textEditRecv->insertPlainText("客户端地址:" + connection->peerAddress().toString()+ "客户端端口号:" + QString::number(connection->peerPort()) + "\n");// 接收客户端信息connect(connection, SIGNAL(readyRead()),this, SLOT(on_readyRead_handler()));}
}void Widget::on_readyRead_handler()
{QTcpSocket *tmpSock = qobject_cast<QTcpSocket *>(sender());QByteArray revData = tmpSock->readAll();ui->textEditRecv->insertPlainText("客户端: " + revData);
}

程序运行结果:

image.png

1.5 判断客户端状态(连接或断开)

代码示例:

private slots:void mstateChange(QAbstractSocket::SocketState);void Widget::on_newClient_connect()
{if (server->hasPendingConnections()){// 从TcpSocket中获得客户端地址和端口号QTcpSocket *connection = server->nextPendingConnection();ui->textEditRecv->insertPlainText("客户端地址:" + connection->peerAddress().toString()+ "客户端端口号:" + QString::number(connection->peerPort()) + "\n");// 接收客户端信息connect(connection, SIGNAL(readyRead()),this, SLOT(on_readyRead_handler()));// 判断客户端状态connect(connection, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(mstateChange(QAbstractSocket::SocketState)));}
}void Widget::mstateChange(QAbstractSocket::SocketState socketState)
{QTcpSocket *tmpSock = qobject_cast<QTcpSocket *>(sender());qDebug() << "client out In state:" << socketState;switch (socketState) {case QAbstractSocket::UnconnectedState:ui->textEditRecv->insertPlainText("客户端断开");tmpSock->deleteLater();break;case QAbstractSocket::ConnectedState:case QAbstractSocket::ConnectingState:ui->textEditRecv->insertPlainText("客户端接入");break;}
}

程序运行结果:

image.png

1.6 停止监听或断开退出

代码示例:

void Widget::on_btnStopListen_clicked()
{// 停止监听所有客户端QList<QTcpSocket*> tcpSocketClients = server->findChildren<QTcpSocket*>();for (QTcpSocket* tmp : tcpSocketClients){tmp->close();}server->close();ui->btnListen->setEnabled(true);ui->btnStopListen->setEnabled(false);ui->btnDisconnect->setEnabled(false);
}void Widget::on_btnDisconnect_clicked()
{on_btnStopListen_clicked();delete server;this->close();
}

程序运行结果:

image.png

1.7 显示连接多个客户端

新建 MyComboBox 类:

image.png

新建MyComboBox,使用组合框,显示多个客户端连接(记得提升)
代码示例:
myCombobox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H#include <QComboBox>
#include <QWidget>class MyComboBox : public QComboBox
{Q_OBJECTpublic:MyComboBox(QWidget *parent);protected:void mousePressEvent(QMouseEvent *e) override;signals:void on_ComboBox_clicked();
};#endif // MYCOMBOBOX_H

myCombobox.cpp

#include "mycombobox.h"#include <QMouseEvent>MyComboBox::MyComboBox(QWidget *parent) : QComboBox(parent)
{}void MyComboBox::mousePressEvent(QMouseEvent *e)
{if(e->button() == Qt::LeftButton){emit on_ComboBox_clicked();}QComboBox::mousePressEvent(e);
}

widget.h

private slots:void mComboBox_refresh();

widget.cpp

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);server = new QTcpServer(this);// 初始化服务器地址QList<QHostAddress> address = QNetworkInterface::allAddresses();for (QHostAddress tmp : address){if (tmp.protocol() == QAbstractSocket::IPv4Protocol){ui->comboBoxIP->addItem(tmp.toString());}}// 与客户端连接connect(server, SIGNAL(newConnection()), this, SLOT(on_newClient_connect()));ui->btnStopListen->setEnabled(false);ui->btnDisconnect->setEnabled(false);ui->btnSend->setEnabled(false);// 刷新 comboxconnect(ui->comboBoxChildren,&MyComboBox::on_ComboBox_clicked,this,&Widget::mComboBox_refresh);
}void Widget::mComboBox_refresh()
{ui->comboBoxChildren->clear();QList<QTcpSocket*> tcpSocketClients = server->findChildren<QTcpSocket*>();for(QTcpSocket* tmp:tcpSocketClients){if(tmp!=nullptr)ui->comboBoxChildren->addItem(QString::number(tmp->peerPort()));}ui->comboBoxChildren->addItem("all");
}

程序运行结果:

image.png

1.8 给多个客户端发消息

image.png

代码示例:

private:int childIndex;void Widget::on_btnSend_clicked()
{QList<QTcpSocket*> tcpSocketClients =  server->findChildren<QTcpSocket*>();// 当用户不选择向all,所有客户端进行发送的时候qDebug() << childIndex;if(ui->comboBoxChildren->currentText() != "all"){// 根据用户选择,找到指定客户端进行数据通信,通过childInde来查找,该变量在用户选择条目后触发的on_comboBoxChildren_activated去赋值tcpSocketClients[childIndex]->write(ui->textEditSend->toPlainText().toStdString().c_str());}else{// 遍历所有子客户端,并一一调用write函数,向所有客户端发送for(QTcpSocket* tmp:tcpSocketClients){QByteArray sendData = ui->textEditSend->toPlainText().toLocal8Bit();tmp->write(sendData);}}
}void Widget::on_comboBoxChildren_activated(int index)
{childIndex = index;
}

程序运行结果:

image.png

2. 客户端代码

实现客户端框架步骤:

  1. 设置定时器判断连接是否成功(成功,超时,错误)
  2. 设置断开
  3. 自定义文本颜色
  4. 实现发送和接收数据

2.1 连接服务器

  1. 初始化client
  2. 设置定时器判断是否与服务器连接

代码示例:

private slots:void on_btnConnect_clicked();void onConnected();void onError(QAbstractSocket::SocketError);void onTimeOUt();Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->btnDisconnect->setEnabled(false);ui->btnSend->setEnabled(false);// 初始化clientclient = new QTcpSocket(this);connect(client,SIGNAL(readyRead()),this,SLOT(mRead_Data_From_Server()));
}void Widget::on_btnConnect_clicked()
{client->connectToHost(ui->lineEdit_IP->text(),ui->lineEdit_Port->text().toInt());// 设置定时器判断是否与服务器连接timer = new QTimer(this);timer->setSingleShot(true);// timer->setInterval(5000);connect(timer, SIGNAL(timeout()),this,SLOT(onTimeOUt()));connect(client,SIGNAL(connected()),this,SLOT(onConnected()));connect(client,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));this->setEnabled(false);timer->start(1000);
}void Widget::onTimeOUt()
{ui->textEdit_Recv->insertPlainText("连接超时");client->abort();this->setEnabled(true);
}void Widget::onConnected()
{timer->stop();this->setEnabled(true);ui->textEdit_Recv->append("连接成功!");ui->btnConnect->setEnabled(false);ui->lineEdit_Port->setEnabled(false);ui->lineEdit_IP->setEnabled(false);ui->btnDisconnect->setEnabled(true);ui->btnSend->setEnabled(true);
}void Widget::onError(QAbstractSocket::SocketError error)
{qDebug() << "连接错误:" << error;ui->textEdit_Recv->insertPlainText("连接出问题啦:"+client->errorString());this->setEnabled(true);on_btnConnect_clicked();
}

程序运行结果:

image.png

2.2 断开服务器

代码示例:

void Widget::on_btnDisconnect_clicked()
{client->disconnectFromHost();client->close();ui->textEdit_Recv->append("断开连接");ui->btnConnect->setEnabled(true);ui->btnDisconnect->setEnabled(false);ui->lineEdit_Port->setEnabled(true);ui->lineEdit_IP->setEnabled(true);ui->btnSend->setEnabled(true);
}

程序运行结果:

image.png

2.3 自定义文本颜色

代码示例:

private:void mInserTextByColor(Qt::GlobalColor color,QString str);void Widget::mInserTextByColor(Qt::GlobalColor color,QString str)
{// 获取文本编辑器的光标位置,并将其存储在cursor变量中。QTextCursor cursor =  ui->textEdit_Recv->textCursor();// 创建一个QTextCharFormat对象,用于设置文本格式。QTextCharFormat format;// 使用setForeground方法设置文本的前景色为传入的颜色。format.setForeground(QBrush(QColor(color)));// 将格式化后的字符格式应用到光标上。cursor.setCharFormat(format);// 使用insertText方法在光标位置插入传入的字符串str。cursor.insertText(str);
}

2.4 实现收发数据

代码示例:

// 发送为红色字体
void Widget::on_btnSend_clicked()
{QByteArray sendData = ui->textEdit_Send->toPlainText().toUtf8();client->write(sendData);// 客户端发送数据,并以红色字体插入到文本编辑器中mInserTextByColor(Qt::red, sendData);
}// 接收为黑色字体
void Widget::mRead_Data_From_Server()
{// 将文本编辑器的光标移动到文本末尾ui->textEdit_Recv->moveCursor(QTextCursor::End);// 确保光标可见ui->textEdit_Recv->ensureCursorVisible();// 客户端读取所有数据,并以黑色字体插入到文本编辑器中mInserTextByColor(Qt::black, client->readAll());
}

程序运行结果:

image.png

相关文章:

用QT做一个网络调试助手

文章目录 前言一、TCP网络调试助手介绍1. 项目概述2. 开发流程3. TCP服务器的关键流程4. TCP客户端的关键流程 二、实现UI界面1. 服务器界面2. 客户端界面 三、实现代码框架1. 服务器代码1.1 初始化服务器地址1.2 开始监听1.3 与客户端连接1.4 接收客户端信息1.5 判断客户端状态…...

Qt 5.14.2 学习记录 —— 이십이 QSS

文章目录 1、概念2、基本语法3、给控件应用QSS设置4、选择器1、子控件选择器2、伪类选择器 5、样式属性box model 6、实例7、登录界面 1、概念 参考了CSS&#xff0c;都是对界面的样式进行设置&#xff0c;不过功能不如CSS强大。 可通过QSS设置样式&#xff0c;也可通过C代码…...

HTML 符号详解

HTML 符号详解 引言 HTML(超文本标记语言)符号是HTML文档中用来表示特殊字符的标记。这些符号在日常网页设计和开发中扮演着重要角色,特别是在需要显示版权、商标、货币符号等特殊字符时。本文将详细介绍HTML符号的用法、类型以及如何在HTML文档中插入这些符号。 HTML符号…...

第十二章 I 开头的术语

文章目录 第十二章 I 开头的术语以 I 开头的术语被识别 (identified by)识别关系 (identifying relationship)身份 (identity)idkey隐式全局引用 (implicit global reference)隐含命名空间 (implied namespace)包含文件 (include file)传入锁 (incoming lock) 索引 (index)索引…...

用XAMPP安装PHP环境(Window系统)

视频教程 BV1jA411v791 进入XAMPP官网 Download XAMPP 找到最新版本&#xff0c;64位的下载&#xff0c;一路安装&#xff0c;语言只有英语德语两个&#xff08;不会德语&#xff09; 安装好以后启动软件&#xff0c;点Apache&#xff0c;MySql&#xff0c;start 在C:\xampp\…...

02.01 生产者消费者

请使用条件变量实现2生产者2消费者模型&#xff0c;注意1个生产者在生产的时候&#xff0c;另外一个生产者不能生产。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h>…...

区块链项目孵化与包装设计:从概念到市场的全流程指南

区块链技术的快速发展催生了大量创新项目&#xff0c;但如何将一个区块链项目从概念孵化成市场认可的产品&#xff0c;是许多团队面临的挑战。本文将从孵化策略、包装设计和市场落地三个维度&#xff0c;为你解析区块链项目成功的关键步骤。 一、区块链项目孵化的核心要素 明确…...

Redis|前言

文章目录 什么是 Redis&#xff1f;Redis 主流功能与应用 什么是 Redis&#xff1f; Redis&#xff0c;Remote Dictionary Server&#xff08;远程字典服务器&#xff09;。Redis 是完全开源的&#xff0c;使用 ANSIC 语言编写&#xff0c;遵守 BSD 协议&#xff0c;是一个高性…...

电脑优化大师-解决电脑卡顿问题

我们常常会遇到电脑运行缓慢、网速卡顿的情况&#xff0c;但又不知道是哪个程序在占用过多资源。这时候&#xff0c;一款能够实时监控网络和系统状态的工具就显得尤为重要了。今天&#xff0c;就来给大家介绍一款小巧实用的监控工具「TrafficMonitor」。 「TrafficMonitor 」是…...

Linux篇——权限

在生活中我们知道&#xff0c;一个人能够从事的工作或任务&#xff0c;不是取决于你是谁&#xff0c;而是取决于你的身份是什么&#xff0c;就比如同一个人&#xff0c;如果他是校长&#xff0c;那就可以说放假就放假&#xff0c;如果是学生&#xff0c;就没有这个决定的权力。…...

Python 梯度下降法(六):Nadam Optimize

文章目录 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nadam Optimize一、数学原理1.1 介绍1.2 符号定义1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nad…...

大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探

以下视频内容为叶梓分享DeepSeek多模态大模型janus的部署&#xff0c;并验证其实际效果&#xff0c;包括图生文和文生图两部分。 叶梓老师人工智能培训分享DeepSeek多模态大模型janus初探 DeepSeek 的多模态大模型 Janus 是一款强大的 AI 模型&#xff0c;专注于图像和文本的多…...

2025最新源支付V7全套开源版+Mac云端+五合一云端

2025最新源支付V7全套开源版Mac云端五合一云端 官方1999元&#xff0c; 最新非网上那种功能不全带BUG开源版&#xff0c;可以自己增加授权或二开 拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI&#xff0c;让您能更方便快捷地解决知识付费和运营赞助的难题 它基于…...

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …...

计算机网络——流量控制

流量控制的基本方法是确保发送方不会以超过接收方处理能力的速度发送数据包。 通常的做法是接收方会向发送方提供某种反馈&#xff0c;如&#xff1a; &#xff08;1&#xff09;停止&等待 在任何时候只有一个数据包在传输&#xff0c;发送方发送一个数据包&#xff0c;…...

[Java基础]开发工具Idea

安装工具 IDE: 称为集成开发环境, 把代码编写,编译,执行等功能综合在一起的工具 卸载 控制面板->卸载程序->卸载->勾选清空配置->确认卸载 下载/安装 官网下载: IntelliJ IDEA – the Leading Java and Kotlin IDE 默认安装: 旗舰版安装无需任何勾选, 傻瓜安装…...

Java线程池

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解线程池运行原理 线程的各种属性参数关闭问题异常处理拒绝策略常见的线程池 可以分析下自身工作中用的各种线程池和参数设定 工作中用到的有 普通的 Th…...

2025年01月27日Github流行趋势

项目名称&#xff1a;onlook项目地址url&#xff1a;https://github.com/onlook-dev/onlook项目语言&#xff1a;TypeScript历史star数&#xff1a;5340今日star数&#xff1a;211项目维护者&#xff1a;Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简介…...

C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…...

Deepseek本地部署(ollama+open-webui)

ollama 首先是安装ollama&#xff0c;这个非常简单 https://ollama.com/ 下载安装即可 open-webui 这个是为了提供一个ui&#xff0c;毕竟我们也不想在cmd和模型交互&#xff0c;很不方便。 第一&#xff0c;需要安装python3.11&#xff0c;必须是3.11&#xff08;其他版…...

(七)Spring Cloud Alibaba 2023.x:RocketMQ 消息队列配置与实现

目录 前言 准备 安装RocketMq服务 下载rocketmq服务 下载rocketmq 控制台 项目集成 引入依赖 生产者服务配置 消费者服务配置 发送队列消息 前言 在微服务架构中&#xff0c;异步消息通信是实现系统解耦、提高性能和增强系统可靠性的重要手段。在 Spring Cloud Alib…...

2848、与车相交的点

2848、[简单] 与车相交的点 1、题目描述 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &#xff0c;其中 starti 是第 i 辆车的起点&#xff0c;endi 是第 i 辆车的终点。 返回数轴上被车 任意…...

51单片机开发:温度传感器

温度传感器DS18B20&#xff1a; 初始化时序图如下图所示&#xff1a; u8 ds18b20_init(void){ds18b20_reset();return ds18b20_check(); }void ds18b20_reset(void){DS18B20_PORT 0;delay_10us(75);DS18B20_PORT 1;delay_10us(2); }u8 ds18b20_check(void){u8 time_temp0;wh…...

三甲医院大型生信服务器多配置方案剖析与应用(2024版)

一、引言 1.1 研究背景与意义 在当今数智化时代&#xff0c;生物信息学作为一门融合生物学、计算机科学和信息技术的交叉学科&#xff0c;在三甲医院的科研和临床应用中占据着举足轻重的地位。随着高通量测序技术、医学影像技术等的飞速发展&#xff0c;生物医学数据呈爆发式…...

【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类

一、贝叶斯原理 贝叶斯算法是基于贝叶斯公式的&#xff0c;其公式为&#xff1a; 其中叫做先验概率&#xff0c;叫做条件概率&#xff0c;叫做观察概率&#xff0c;叫做后验概率&#xff0c;也是我们求解的结果&#xff0c;通过比较后验概率的大小&#xff0c;将后验概率最大的…...

ASP.NET Core 启动并提供静态文件

ASP.NET Core 启动并提供静态文件 即是单个可执行文件&#xff0c;它既运行 API 项目&#xff0c;也托管 前端项目&#xff08;通常是前端的发布文件&#xff09;。 这种方式一般是通过将 前端项目 的发布文件&#xff08;例如 HTML、CSS、JavaScript&#xff09;放入 Web AP…...

MySQL 导入数据

MySQL 导入数据 引言 MySQL 是一款广泛使用的开源关系型数据库管理系统,它以其稳定性和高效性被广泛应用于各种规模的应用程序中。在数据库管理过程中,数据的导入是至关重要的一个环节。本文将详细介绍如何在 MySQL 中导入数据,包括导入数据的准备、操作步骤以及注意事项。…...

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译

感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...

将 OneLake 数据索引到 Elasticsearch - 第二部分

作者&#xff1a;来自 Elastic Gustavo Llermaly 及 Jeffrey Rengifo 本文分为两部分&#xff0c;第二部分介绍如何使用自定义连接器将 OneLake 数据索引并搜索到 Elastic 中。 在本文中&#xff0c;我们将利用第 1 部分中学到的知识来创建 OneLake 自定义 Elasticsearch 连接器…...

数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱

本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 ​编辑 一本篇背景&#xff1a; 二性能对比&#xff1a; 2.1训练效率&#xff1a; 2.2推理速度&#xff1a; 三语言理解与生成能力对比&#xff1a; 3.1语言理解&#xff1a; 3.2语言生成&#xff1a; 四本篇小结…...

安心即美的生活方式

如果你的心是安定的&#xff0c;那么&#xff0c;外界也就安静了。就像陶渊明说的&#xff1a;心远地自偏。不是走到偏远无人的边荒才能得到片刻清净&#xff0c;不需要使用洪荒之力去挣脱生活的枷锁&#xff0c;这是陶渊明式的中国知识分子的雅量。如果你自己是好的男人或女人…...

基于深度学习的输电线路缺陷检测算法研究(论文+源码)

输电线路关键部件的缺陷检测对于电网安全运行至关重要&#xff0c;传统方法存在效率低、准确性不高等问题。本研究探讨了利用深度学习技术进行输电线路关键组件的缺陷检测&#xff0c;目的是提升检测的效率与准确度。选用了YOLOv8模型作为基础&#xff0c;并通过加入CA注意力机…...

手写防抖函数、手写节流函数

文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内事件又被触发&#xff0c;则重新计时。这可以使用在一些点击请求的事件上&#xff0c;避免因为用户的多次点击向后端发送多次请求。 function debou…...

UE 导入sbsar插件

Substance 3D 插件支持直接在 Unreal Engine 5 和 Unreal Engine 4 中使用 Substance 材质。无论您是在处理游戏、可视化&#xff0c;还是在移动设备、桌面或 XR 上进行部署&#xff0c;Substance 都能提供独特的体验&#xff0c;并优化功能以提高生产力。 Substance 资源平台…...

pytorch实现简单的情感分析算法

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 在PyTorch中实现中文情感分析算法通常涉及以下几个步骤&#xff1a;数据预处理、模型定义、训练和评估。下面是一个简单的实现示例&#xff0c;使用LSTM模型进行中文情感分析。 1. 数据预处理 首先&#xff0c;我…...

Baklib揭示内容中台实施最佳实践的策略与实战经验

内容概要 在当前数字化转型的浪潮中&#xff0c;内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统&#xff0c;而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导&#xff0c;这些实践为企业在建设高效内容中台时提供了宝…...

11.[前端开发]Day11-HTML+CSS阶段练习(仿小米和考拉页面)

一、小米穿戴设备&#xff08;浮动&#xff09; 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vie…...

设计模式学习(二)

结构型 适配器模式 定义 它允许将一个类的接口转换成客户端期望的另一个接口。适配器模式通常用于使不兼容的接口能够一起工作。 适配器模式的角色 目标接口&#xff08;Target&#xff09;&#xff1a;客户端期望的接口。适配者&#xff08;Adaptee&#xff09;&#xff…...

【Docker】快速部署 Nacos 注册中心

【Docker】快速部署 Nacos 注册中心 引言 Nacos 注册中心是一个用于服务发现和配置管理的开源项目。提供了动态服务发现、服务健康检查、动态配置管理和服务管理等功能&#xff0c;帮助开发者更轻松地构建微服务架构。 仓库地址 https://github.com/alibaba/nacos 步骤 拉取…...

大白话讲清楚embedding原理

Embedding&#xff08;嵌入&#xff09;是一种将高维数据&#xff08;如单词、句子、图像等&#xff09;映射到低维连续向量的技术&#xff0c;其核心目的是通过向量表示捕捉数据之间的语义或特征关系。以下从原理、方法和应用三个方面详细解释Embedding的工作原理。 一、Embe…...

pandas中的apply方法使用

apply 用于对 DataFrame 或 Series 中的数据进行逐行或逐列的操作。它可以接受一个函数&#xff08;通常是 lambda 函数或自定义函数&#xff09;&#xff0c;并将该函数应用到每一行或每一列上。apply语法&#xff1a; DataFrame.apply(func, axis0, rawFalse, result_typeNo…...

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构&#xff0c;…...

Nginx知识

nginx 精简的配置文件 worker_processes 1; # 可以理解为一个内核一个worker # 开多了可能性能不好events {worker_connections 1024; } # 一个 worker 可以创建的连接数 # 1024 代表默认一般不用改http {include mime.types;# 代表引入的配置文件# mime.types 在 ngi…...

CNN的各种知识点(三):有关于VGG16 的结构展开的问题(1)

有关于VGG16 的结构展开的问题&#xff08;1&#xff09; 1. VGG16 的原生结构2. model.avgpool 的作用原生 VGG16 中没有 avgpool 层&#xff1f;代码中的 model.avgpool 是什么&#xff1f; 3. model.classifier 的作用原生 VGG16 的 classifier用户代码中的 classifier 4. 为…...

vue3中el-input无法获得焦点的问题

文章目录 现象两次nextTick()加setTimeout()解决结论 现象 el-input被外层div包裹了&#xff0c;设置autofocus不起作用&#xff1a; <el-dialog v-model"visible" :title"title" :append-to-bodytrue width"50%"><el-form v-model&q…...

sqli-labs靶场通关

sqli-las通关 mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有…...

深度学习深度解析:从基础到前沿

引言 深度学习作为人工智能的一个重要分支&#xff0c;通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…...

sobel边缘检测算法

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 Sobel边缘检测算法是一种用于图像处理中的边缘检测方法&#xff0c;它能够突出图像中灰度变化剧烈的地方&#xff0c;也就是边缘。该算法通过计算图像在水平方向和垂直方向上的梯度来检测边缘&#xff0c;梯度值越大…...

LeetCode 349: 两个数组的交集

LeetCode 349: 两个数组的交集 - C语言 问题描述 给定两个数组 ransomNote 和 magazine&#xff0c;你需要判断 ransomNote 是否可以由 magazine 里的字符构成。每个字符可以使用一次。 解题思路 通过统计 magazine 中每个字符的频次&#xff0c;并与 ransomNote 中字符的需…...

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 &#xff0c;数据类型是非常重要的概念&#xff0c;因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言&#xff0c;这意味着变量的数…...