WPF 上位机开发模板
WPF 上位机开发模板
WPF上位机开发模板,集成了基础操作菜单、海康视觉实时图像界面、串口通讯、网口通讯、主流PLC通讯、数据存储、图片存储、参数配置、权限管理、第三方webapi接口接入、数据追溯与查询等功能。
一、项目结构
WpfSupervisor/
├── Models/ # 数据模型
│ ├── DeviceModels.cs
│ ├── ImageModel.cs
│ ├── LogModel.cs
│ ├── ParameterModel.cs
│ └── UserModel.cs
├── Services/ # 服务层
│ ├── Communication/
│ │ ├── ComService.cs
│ │ ├── EthernetService.cs
│ │ ├── PlcService.cs
│ │ └── WebApiService.cs
│ ├── Database/
│ │ ├── DatabaseService.cs
│ │ └── ImageStorage.cs
│ ├── HikVision/
│ │ └── HikVisionService.cs
│ ├── Security/
│ │ ├── AuthService.cs
│ │ └── PermissionService.cs
│ └── Utility/
│ ├── ConfigManager.cs
│ └── Logger.cs
├── ViewModels/ # 视图模型
│ ├── MainViewModel.cs
│ ├── CommunicationViewModel.cs
│ ├── ImageViewModel.cs
│ ├── ParameterViewModel.cs
│ └── UserViewModel.cs
├── Views/ # 视图
│ ├── MainWindow.xaml
│ ├── CommunicationView.xaml
│ ├── ImageView.xaml
│ ├── ParameterView.xaml
│ └── LoginView.xaml
├── Helpers/ # 辅助类
│ ├── RelayCommand.cs
│ └── EnumExtensions.cs
└── App.xaml.cs # 应用程序入口
二、核心代码实现
1. 数据模型 (Models/)
// DeviceModels.cs
public class PlcDevice
{public string Id { get; set; }public string Name { get; set; }public string IpAddress { get; set; }public int Port { get; set; }public string Protocol { get; set; } // Modbus, S7, etc.
}public class SerialDevice
{public string Id { get; set; }public string Name { get; set; }public string PortName { get; set; }public int BaudRate { get; set; }public Parity Parity { get; set; }public int DataBits { get; set; }public StopBits StopBits { get; set; }
}// ImageModel.cs
public class CapturedImage
{public string Id { get; set; }public byte[] ImageData { get; set; }public DateTime CaptureTime { get; set; }public string DeviceId { get; set; }public string FilePath { get; set; }
}// LogModel.cs
public class SystemLog
{public string Id { get; set; }public DateTime Timestamp { get; set; }public string Level { get; set; } // Info, Warning, Errorpublic string Message { get; set; }public string UserId { get; set; }
}// ParameterModel.cs
public class SystemParameter
{public string Id { get; set; }public string Key { get; set; }public string Value { get; set; }public string Description { get; set; }public string Category { get; set; }
}// UserModel.cs
public class User
{public string Id { get; set; }public string Username { get; set; }public string PasswordHash { get; set; }public string FullName { get; set; }public string Role { get; set; } // Admin, Operator, etc.public DateTime LastLogin { get; set; }
}
2. 服务层 (Services/)
2.1 通信服务
// ComService.cs
public class ComService : IDisposable
{private SerialPort _serialPort;public event Action<string> DataReceived;public bool IsOpen => _serialPort?.IsOpen ?? false;public void Open(SerialDevice device){_serialPort = new SerialPort(device.PortName, device.BaudRate, device.Parity, device.DataBits, device.StopBits);_serialPort.DataReceived += (s, e) => {try{var data = _serialPort.ReadExisting();DataReceived?.Invoke(data);}catch (Exception ex){Logger.LogError($"串口数据接收错误: {ex.Message}");}};_serialPort.Open();}public void Close() => _serialPort?.Close();public void Send(string data) => _serialPort?.Write(data);public void Dispose() => Close();
}// EthernetService.cs
public class EthernetService : IDisposable
{private TcpClient _tcpClient;private NetworkStream _stream;public event Action<string> DataReceived;public bool IsConnected => _tcpClient?.Connected ?? false;public async Task ConnectAsync(string ipAddress, int port){_tcpClient = new TcpClient();await _tcpClient.ConnectAsync(ipAddress, port);_stream = _tcpClient.GetStream();_ = ReceiveDataAsync();}private async Task ReceiveDataAsync(){try{var buffer = new byte[1024];while (_stream != null && _stream.CanRead){int bytesRead = await _stream.ReadAsync(buffer, 0, buffer.Length);var data = Encoding.ASCII.GetString(buffer, 0, bytesRead);DataReceived?.Invoke(data);}}catch (Exception ex){Logger.LogError($"以太网数据接收错误: {ex.Message}");}}public void Send(string data){if (_stream == null || !_stream.CanWrite) return;var bytes = Encoding.ASCII.GetBytes(data);_stream.Write(bytes, 0, bytes.Length);}public void Disconnect() => _tcpClient?.Close();public void Dispose(){Disconnect();_stream?.Close();}
}// PlcService.cs (使用S7.Net库示例)
public class PlcService : IDisposable
{private S7.Net.PLC _plc;public event Action<string> DataReceived;public bool IsConnected => _plc?.IsConnected ?? false;public async Task ConnectAsync(PlcDevice device){_plc = new S7.Net.PLC(device.Protocol == "S7" ? S7.Net.CpuType.S71200 : S7.Net.CpuType.S7300, device.IpAddress, device.Port);await Task.Run(() => _plc.Open());}public async Task<T> ReadAsync<T>(string address){if (!IsConnected) throw new InvalidOperationException("PLC未连接");return await Task.Run(() => (T)_plc.Read(address));}public async Task WriteAsync<T>(string address, T value){if (!IsConnected) throw new InvalidOperationException("PLC未连接");await Task.Run(() => _plc.Write(address, value));}public void Dispose() => _plc?.Close();
}// WebApiService.cs
public class WebApiService
{private readonly HttpClient _httpClient;private readonly string _baseUrl;public WebApiService(string baseUrl){_baseUrl = baseUrl.EndsWith("/") ? baseUrl : baseUrl + "/";_httpClient = new HttpClient();}public async Task<T> GetAsync<T>(string endpoint){var response = await _httpClient.GetAsync(_baseUrl + endpoint);response.EnsureSuccessStatusCode();return await response.Content.ReadAsAsync<T>();}public async Task PostAsync<T>(string endpoint, object data){var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");var response = await _httpClient.PostAsync(_baseUrl + endpoint, content);response.EnsureSuccessStatusCode();}
}
2.2 数据库服务
// DatabaseService.cs
public class DatabaseService
{private readonly string _connectionString;private SQLiteConnection _connection;public DatabaseService(string dbPath){_connectionString = $"Data Source={dbPath};Version=3;";InitializeDatabase();}private void InitializeDatabase(){_connection = new SQLiteConnection(_connectionString);_connection.Open();// 创建表ExecuteNonQuery(@"CREATE TABLE IF NOT EXISTS SystemLogs (Id TEXT PRIMARY KEY,Timestamp TEXT,Level TEXT,Message TEXT,UserId TEXT);CREATE TABLE IF NOT EXISTS SystemParameters (Id TEXT PRIMARY KEY,Key TEXT,Value TEXT,Description TEXT,Category TEXT);CREATE TABLE IF NOT EXISTS Users (Id TEXT PRIMARY KEY,Username TEXT,PasswordHash TEXT,FullName TEXT,Role TEXT,LastLogin TEXT);");}public void ExecuteNonQuery(string sql, params object[] parameters){using (var cmd = new SQLiteCommand(sql, _connection)){for (int i = 0; i < parameters.Length; i++){cmd.Parameters.AddWithValue($"@p{i}", parameters[i]);}cmd.ExecuteNonQuery();}}public T ExecuteScalar<T>(string sql, params object[] parameters){using (var cmd = new SQLiteCommand(sql, _connection)){for (int i = 0; i < parameters.Length; i++){cmd.Parameters.AddWithValue($"@p{i}", parameters[i]);}return (T)cmd.ExecuteScalar();}}public DataTable ExecuteQuery(string sql, params object[] parameters){using (var cmd = new SQLiteCommand(sql, _connection)){for (int i = 0; i < parameters.Length; i++){cmd.Parameters.AddWithValue($"@p{i}", parameters[i]);}var adapter = new SQLiteDataAdapter(cmd);var table = new DataTable();adapter.Fill(table);return table;}}public void Dispose(){_connection?.Close();}
}// ImageStorage.cs
public class ImageStorage
{private readonly string _imageFolderPath;private readonly DatabaseService _dbService;public ImageStorage(string folderPath, DatabaseService dbService){_imageFolderPath = folderPath;Directory.CreateDirectory(_imageFolderPath);_dbService = dbService;}public async Task SaveImageAsync(CapturedImage image){// 保存到数据库var imageId = Guid.NewGuid().ToString();var parameters = new object[]{imageId,image.ImageData != null ? Convert.ToBase64String(image.ImageData) : null,image.CaptureTime.ToString("o"),image.DeviceId,image.FilePath};_dbService.ExecuteNonQuery(@"INSERT INTO Images (Id, Data, CaptureTime, DeviceId, FilePath)VALUES (@p0, @p1, @p2, @p3, @p4);", parameters);// 保存文件if (image.ImageData != null){var filePath = Path.Combine(_imageFolderPath, $"{imageId}.jpg");await File.WriteAllBytesAsync(filePath, image.ImageData);// 更新数据库中的文件路径_dbService.ExecuteNonQuery(@"UPDATE Images SET FilePath = @p0 WHERE Id = @p1;", filePath, imageId);}}public async Task<CapturedImage> GetImageAsync(string id){var row = _dbService.ExecuteQuery("SELECT * FROM Images WHERE Id = @p0;", id).Rows[0];return new CapturedImage{Id = row["Id"].ToString(),ImageData = row["Data"] != DBNull.Value ? Convert.FromBase64String(row["Data"].ToString()) : null,CaptureTime = DateTime.Parse(row["CaptureTime"].ToString()),DeviceId = row["DeviceId"].ToString(),FilePath = row["FilePath"]?.ToString()};}
}
2.3 海康视觉服务
// HikVisionService.cs
public class HikVisionService
{private readonly HttpClient _httpClient;private readonly string _baseUrl;private readonly string _username;private readonly string _password;public event Action<byte[]> ImageReceived;public HikVisionService(string baseUrl, string username, string password){_baseUrl = baseUrl.EndsWith("/") ? baseUrl : baseUrl + "/";_username = username;_password = password;_httpClient = new HttpClient();// 登录Login();}private void Login(){var loginData = new Dictionary<string, string>{{"action", "login"},{"user", _username},{"password", _password}};var content = new FormUrlEncodedContent(loginData);var response = _httpClient.PostAsync(_baseUrl + "login", content).Result;response.EnsureSuccessStatusCode();}public async Task StartRealTimeImage(){// 启动实时图像流var streamResponse = await _httpClient.GetAsync($"{_baseUrl}stream");streamResponse.EnsureSuccessStatusCode();var stream = await streamResponse.Content.ReadAsStreamAsync();// 处理图像流数据using (var reader = new BinaryReader(stream)){while (true){// 实际实现需要解析海康威视的流协议// 这里简化处理var buffer = reader.ReadBytes(1024);if (buffer.Length > 0){// 解码图像数据var imageData = DecodeHikVisionImage(buffer);ImageReceived?.Invoke(imageData);}}}}private byte[] DecodeHikVisionImage(byte[] buffer){// 实际实现需要根据海康威视的图像编码格式解码// 这里简化处理,直接返回原始数据return buffer;}
}
2.4 安全服务
// AuthService.cs
public class AuthService
{private readonly DatabaseService _dbService;public AuthService(DatabaseService dbService){_dbService = dbService;}public async Task<User> LoginAsync(string username, string password){var userRow = _dbService.ExecuteQuery("SELECT * FROM Users WHERE Username = @p0;", username).Rows[0];var user = MapUserFromRow(userRow);// 验证密码if (VerifyPassword(password, user.PasswordHash)){user.LastLogin = DateTime.UtcNow.ToString("o");await UpdateUserAsync(user);return user;}return null;}private bool VerifyPassword(string inputPassword, string storedHash){// 实际实现应使用安全的密码哈希验证// 这里简化处理return inputPassword == storedHash; }public async Task<User> GetUserAsync(string userId){var row = _dbService.ExecuteQuery("SELECT * FROM Users WHERE Id = @p0;", userId).Rows[0];return MapUserFromRow(row);}private User MapUserFromRow(DataRow row){return new User{Id = row["Id"].ToString(),Username = row["Username"].ToString(),PasswordHash = row["PasswordHash"].ToString(),FullName = row["FullName"].ToString(),Role = row["Role"].ToString(),LastLogin = row["LastLogin"]?.ToString()};}private async Task UpdateUserAsync(User user){_dbService.ExecuteNonQuery(@"UPDATE Users SET LastLogin = @p0 WHERE Id = @p1;",user.LastLogin, user.Id);}
}// PermissionService.cs
public class PermissionService
{private readonly DatabaseService _dbService;public PermissionService(DatabaseService dbService){_dbService = dbService;}public async Task<bool> HasPermissionAsync(string userId, string permission){// 从数据库查询用户权限var hasPermission = await _dbService.ExecuteScalarAsync<bool>("SELECT COUNT(*) > 0 FROM UserPermissions WHERE UserId = @p0 AND Permission = @p1;",userId, permission);return hasPermission;}public async Task<IEnumerable<string>> GetUserPermissionsAsync(string userId){var permissions = await _dbService.ExecuteQueryAsync("SELECT Permission FROM UserPermissions WHERE UserId = @p0;", userId);return permissions.Select(r => r["Permission"].ToString());}
}
3. 视图模型 (ViewModels/)
// MainViewModel.cs
public class MainViewModel : INotifyPropertyChanged
{private readonly IEventAggregator _eventAggregator;private readonly AuthService _authService;private readonly PermissionService _permissionService;private object _currentView;private User _currentUser;public object CurrentView{get => _currentView;set { _currentView = value; OnPropertyChanged(); }}public User CurrentUser{get => _currentUser;private set { _currentUser = value; OnPropertyChanged(); }}public ICommand LoginCommand { get; }public ICommand LogoutCommand { get; }public MainViewModel(IEventAggregator eventAggregator,AuthService authService,PermissionService permissionService){_eventAggregator = eventAggregator;_authService = authService;_permissionService = permissionService;LoginCommand = new RelayCommand(Login);LogoutCommand = new RelayCommand(Logout, CanLogout);}private async void Login(){// 实际实现应显示登录对话框var loginView = new LoginView();if (loginView.ShowDialog() == true){var user = await _authService.LoginAsync(loginView.Username, loginView.Password);if (user != null){CurrentUser = user;CurrentView = new ShellViewModel(_eventAggregator, user).View;_eventAggregator.Publish(new UserLoggedInEvent(user));}}}private void Logout(){CurrentUser = null;CurrentView = new LoginView();_eventAggregator.Publish(new UserLoggedOutEvent());}private bool CanLogout() => CurrentUser != null;public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}// CommunicationViewModel.cs
public class CommunicationViewModel : INotifyPropertyChanged
{private readonly ComService _comService;private readonly EthernetService _ethernetService;private readonly PlcService _plcService;private readonly WebApiService _webApiService;private SerialDevice _selectedSerialDevice;private PlcDevice _selectedPlcDevice;public ObservableCollection<SerialDevice> SerialDevices { get; } = new();public ObservableCollection<PlcDevice> PlcDevices { get; } = new();public SerialDevice SelectedSerialDevice{get => _selectedSerialDevice;set { _selectedSerialDevice = value; OnPropertyChanged();OpenSerialPort();}}public PlcDevice SelectedPlcDevice{get => _selectedPlcDevice;set { _selectedPlcDevice = value; OnPropertyChanged();ConnectPlc();}}public ICommand RefreshDevicesCommand { get; }public ICommand SendSerialCommand { get; }public ICommand ReadPlcCommand { get; }public ICommand WritePlcCommand { get; }public CommunicationViewModel(ComService comService,EthernetService ethernetService,PlcService plcService,WebApiService webApiService){_comService = comService;_ethernetService = ethernetService;_plcService = plcService;_webApiService = webApiService;RefreshDevicesCommand = new RelayCommand(RefreshDevices);SendSerialCommand = new RelayCommand(SendSerialData, CanSendSerial);ReadPlcCommand = new RelayCommand(ReadPlcData, CanReadPlc);WritePlcCommand = new RelayCommand(WritePlcData, CanWritePlc);LoadDevices();}
相关文章:
WPF 上位机开发模板
WPF 上位机开发模板 WPF上位机开发模板,集成了基础操作菜单、海康视觉实时图像界面、串口通讯、网口通讯、主流PLC通讯、数据存储、图片存储、参数配置、权限管理、第三方webapi接口接入、数据追溯与查询等功能。 一、项目结构 WpfSupervisor/ ├── Models/ …...
理想星环OS选择NuttX作为MCU侧OS的核心原因分析
文章目录 引言一、POSIX兼容性:降低汽车软件迁移成本二、轻量级与模块化:适配MCU资源约束三、硬实时性能:保障车辆控制确定性四、多芯片适配:加速车企供应链灵活性五、安全与可靠性:构建纵深防御体系六、社区与生态&am…...
IP数据报发送和转发的过程
1. 发送端准备数据 应用程序(比如浏览器)要发送数据,比如访问一个网站。 应用层(HTTP) → 传输层(TCP/UDP) → 网络层(IP)。 IP层负责把数据包打包,加上必要…...
Pinia 详细解析:Vue3 的状态管理利器
一、Pinia 概述 Pinia 是 Vue 3 的官方推荐状态管理库,由 Vue 核心团队维护。它是对 Vuex 的改进和简化,提供了更简洁的 API 和更好的 TypeScript 支持。 Pinia 的核心优势 更简单的 API:相比 Vuex 减少了概念和模板代码完美的 TypeScript…...
pytorch python常用指令
一、常用的conda指令 创建新的python环境 conda create -n env_name python3.x 查看已有的python环境 conda env list 进入已有的python环境 conda activate env_name 退出当前的python环境 conda deactivate 二、常用的pip指令 pip install -r requirements.txt 根据…...
ubantu18.04(Hadoop3.1.3)之Spark安装和编程实践
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 以下所有操…...
Ubuntu下安装vsode+qt搭建开发框架(二)
Ubuntu下安装vsode+qt搭建开发框架(二) 上一节介绍了vsode下搭建qt环境,采用的项目构建方式是使用qt官方的qmake工具。然而从qt6之后,官方已经开始推荐使用cmake来构建项目;并且许多项目都是cmake直接构建的,用cmake来构建项目具有可以更方便的融合其他开源项目。 一、vs…...
获取房源信息并完成可视化——网络爬虫实战1
房源信息爬虫与可视化分析程序 个人程序全网一手,盗卖必究 项目介绍 本项目是一个基于Python的房源信息爬虫与可视化分析工具,可以爬取链家网的二手房源信息,并对数据进行清洗、分析和可视化展示。通过本工具,用户可以快速了解特…...
css word
介绍 CSS word-spacing 属性,用于指定段字之间的空间,例如: p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意: 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…...
[mysql]约束(上)
约束 道德约束,法律约束,这个约束在表里面是狭义的. 约束广义的,比如数值型你就不能录入’abc’.字符,定义了varchar(15)范围不能超过数量15. 我们这个章节要说的约束是狭义的,是具体的我们设定的约束, 为什么我们需要约束呢 我们是为了数据的精确性和可靠性,我们了为了防…...
Eclipse 插件开发 2
Eclipse 插件开发 2 1 插件配置 1 插件配置 <?xml version"1.0" encoding"UTF-8"?> <?eclipse version"3.4"?> <plugin><extension point"org.eclipse.ui.commands"><category id"com.xu.learn.…...
用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1
希望借助手写这个go的中间件项目,能够理解go语言的特性以及用go写中间件的优势之处,同时也是为了更好的使用和优化公司用到的trpc,并且作者之前也使用过grpc并有一定的兴趣,所以打算从0构建一个rpc系统,对于生产环境已…...
树莓派(Raspberry Pi)入门建议
树莓派(Raspberry Pi)是一个低成本、信用卡大小的微型电脑,它的核心价值在于高度灵活的可编程性和丰富的硬件扩展能力。根据你的兴趣和需求,它可以用来做各种有趣且实用的项目,以下是常见的应用场景和实例:…...
SpringBoot物资管理系统 | JavaWeb项目设计与实现
概述 基于JavaWeb技术实现了一套完整的物资管理解决方案。该系统适用于企业、学校、医院等机构,提供高效的物资入库、申报、公告管理等功能,帮助用户实现物资管理的数字化与智能化。 主要内容 1. 管理员功能实现 5.1.1 物资管…...
《P1950 长方形》
题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形。 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为 n,m。小明将这张纸看成是由nm个格子组成,在剪的时候,只能沿着格子的…...
SpringCloud微服务架构
Spring Cloud是一个广泛使用的微服务框架,它基于Spring Boot构建,旨在帮助开发者构建复杂的分布式系统。Spring Cloud提供了多种工具和库,使得开发人员可以轻松地构建和部署微服务架构。以下是一些关键组件和概念,帮助你理解Sprin…...
网络管理知识点
1.传统网络管理:Web网管方式,CLI方式,基于SNMP集中管理 2.SNMP简单网络管理协议 SNMPV1实现方便,安全性弱 SNMPV2支持更多错误 SNMPV3认证加密,访问控制 3.SNMP,UDP传输效率较高,报文容易丢失…...
【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
在企业级 Java Web 应用的部署场景中,Tomcat 作为主流的 Servlet 容器和 Web 服务器,其核心配置的优化以及集群搭建对于保障应用的高性能、高可用性至关重要。 一、Tomcat 核心配置优化 1.1 server.xml 配置文件解析 Tomcat 的核心配置文件server…...
模板引擎语法-算术运算
模板引擎语法-算术运算 文章目录 模板引擎语法-算术运算[toc]1.加法运算2.减法运算3.乘法与除法运算4.四则运算5.整除运算 在Django框架模板中,没有专门定义关于算术运算的语法。不过,通过一些标签和过滤器的配合使用,可以模拟实现类似“加减…...
MySQL 联合查询教程
MySQL 联合查询教程 在 MySQL 中,联合查询用于从多个表中检索数据,常用于关联表中的信息。联合查询(JOIN)通过将两个或更多表根据一定条件连接起来,从而形成一个虚拟的结果集。MySQL 支持多种类型的联合查询ÿ…...
罗技Flow跨电脑控制
Windows 下载适用于 Windows 10 或更高版本的应用程序 macOS 下载适用于 macOS 12 或更高版本的应用程序 Flow 让您可以在两台电脑之间甚至 Windows 和 macOS 之间畅快办公。 只需将支持 Flow 的鼠标的光标移动到屏幕边缘即可在电脑和操作系统之间切换。支持 Flow 的键盘会…...
Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
LeetCode100题
LeetCode100 两数之和 遍历数组,以哈希表存数与下标,边存边查,速找和为目标值的两数下标 class Solution {public int[] twoSum(int[] nums, int target) {int[] ansnew int[2];HashMap<Integer,Integer> mapnew HashMap<>();…...
鸿蒙代码@Builder
#代码如下: Entry Component struct CardExample {State title: string "欢迎使用鸿蒙";State content: string "这是一段自定义内容";build() {Column() {this.MyCard({ title: this.title, content: this.content })}.padding(20)}BuilderM…...
Gewechat启动启动报错
Centos7,测试连接时发现这个错误。 [rootxin ~]# curl -i -X POST http://127.0.0.1:2531/v2/api/tools/getTokenId curl: (56) Recv failure: Connection reset by peer 1、删除原容器,重新构建。 docker run -itd \--name gewe \--privileged \-v /ro…...
硅谷甄选41集-71集
第四十三集:完全按照视频敲代码的话会发现左侧顶部tabbar的display:flex失效了,是因为拆分开的子组件里面多了一个div,去掉就好了,vue3不需要再额外包裹元素。因为路径变化了,所以找不到图片的话在前面再加一个…。 第四十五集&am…...
PyQt6实例_消息工具_使用与完整代码分享
目录 使用 每日消息 全局查询 更新数据库 代码 数据库表创建 代码-数据库相关操作 代码-界面与操作逻辑 视频 使用 工具有三个面板:每日消息、全局查询、更新数据库 “每日消息”和“全局查询”,数据源:同花顺7x24小时快讯 “更新…...
docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql
目录 1.网络超时 方式1. 网络连接问题 方式2. Docker镜像源问题 方式3.使用国内镜像源 2.启动mysql镜像失败 3.navicat无法远程连接mysql 1.网络超时 安装MySQL时出现超时问题,可能由多种原因导致: 方式1. 网络连接问题 原因:网络不稳定…...
【虚幻C++笔记】碰撞检测
目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…...
SpringBoot集成WebSocket,单元测试执行报错
问题描述 SpringBoot集成了WebSocket,单元测试启动后会报如下错误:javax.websocket.server.ServerContainer not available 这是因为SpringBootTest启动时不会启动服务器,所以WebSocket会报错。 解决方案 在注解中添加 webEnvironmen…...
Git基本操作
1. 安装与配置 安装:你可以从 Git 官方网站 下载 Windows 版本的安装程序。运行安装程序,在安装过程中,你可以按照默认设置进行安装,也可以根据自己的需求进行调整。配置:安装完成后,打开 Git Bash&#x…...
C++异步并发支持库future
future: 1.利用共享状态来异步的获取提供者的值 2.future处于共享状态就绪时才是有效的 3.future不能拷贝构造,只能移动构造,并且移动构造后共享状态失效 std::future::get 1.当共享状态就绪时,返回存储在共享状态中的值。 2…...
c++学习小结
内存分配 空间 栈区(stack)。编译器⾃动分配与释放,主要存放函数的参数值,局部变量值等,连续的内存空 间,由⾼地址向低地址扩展。 堆区(heap) 。由程序员分配与释放;不…...
Pygame物理模拟:实现重力、弹跳与简单物理引擎
Pygame物理模拟:实现重力、弹跳与简单物理引擎 大家好,欢迎来到本期的技术分享!今天我们将一起探讨如何使用Python和Pygame库来实现一个简单的物理模拟系统,其中包括重力、弹跳以及一个基础的物理引擎。如果你对游戏开发或者物理仿真感兴趣,那么这篇文章一定会让你受益匪…...
Python dotenv 使用指南:轻松管理项目环境变量
一、为什么要使用环境变量管理? 很多开发者容易把自己开发的项目上传到Github上,但偶尔会忘记把数据库密码、支付接口密钥等敏感信息和谐掉,当代码提交上去时,这些信息就像裸奔一样暴露在所有人面前。更糟糕的是,不同…...
网络攻防第一~四集
来源于一下 【小迪安全】红蓝对抗 | 网络攻防 | V2023全栈培训_哔哩哔哩_bilibili 目录 第一集 第二集 第一集 web架构包括系统、中间件、程序源码、数据库 系统 windows、linux、windows server 中间件 是前端语言和数据库是当做一个桥梁,当做解析作用&…...
TI---sysconfig生成宏
核心内容概览 1. 宏定义的总体作用 SysConfig生成的宏定义是硬件配置的符号化映射,将图形化界面的配置参数转化为可直接引用的编译时常量,核心价值包括: 免硬编码:避免手动写入硬件参数(如引脚号、波特率࿰…...
【C】初阶数据结构13 -- 快速排序
本篇文章主要讲解经典的排序算法 -- 快速排序算法 目录 1 递归版本的快速排序 1) 算法思想 (1) hoare 版本 (2) 双指针版本 (3) 挖坑法 2) 代码 3) 时间复杂度…...
Spring Boot 3.4 实战指南:从性能优化到云原生增强
一、核心新特性概览 Spring Boot 3.4 于 2024 年 11 月正式发布,带来 6 大维度的 28 项改进。以下是实战开发中最具价值的特性: 1. 性能革命:虚拟线程与 HTTP 客户端优化 虚拟线程支持:Java 21 引入的虚拟线程在 Spring Boot 3…...
Git分支重命名与推送参数解析
这两个参数的解释如下: git branch -M master 中的 -M 参数 -M 是 --move --force 的组合简写,表示强制重命名当前分支为 master。如果当前分支已经存在名为 master 的分支,-M 会强制覆盖它(慎用,可能导致数据丢失&…...
深度学习中的预训练与微调:从基础概念到实战应用全解析
摘要 本文系统解析深度学习中预训练与微调技术,涵盖核心概念、技术优势、模型复用策略、与迁移学习的结合方式,以及微调过程中网络参数更新机制、模型状态分类等内容。同时深入分析深层神经网络训练难点如梯度消失/爆炸问题,为模型优化提供理…...
EMC-148.5MHz或85.5辐射超标-HDMI
EMC 148.5MHz或85.5辐射超标-HDMI 遇到了一台设备过不了EMC ,经排查主要是显示器的HDMI问题 解决办法看看能否更换好一点的HDMI线缆...
DeepSeek系列(9):团队协作最佳实践
团队知识库构建 在知识经济时代,团队知识的有效管理和传递是组织核心竞争力的关键。DeepSeek可以成为打造高效团队知识库的得力助手,让知识管理从繁重工作变为自动化流程。 知识库架构设计 多层次知识结构 一个高效的团队知识库应具备清晰的层级结构,DeepSeek可以协助:…...
信息系统项目管理工程师备考计算类真题讲解十
一、立项管理 1)折现率和折现系数:折现也叫贴现,就是把将来某个时间点的金额换算成现在时间点的等值金额。折现时所使用的利率叫折现率,也叫贴现率。 若n年后能收F元,那么这些钱在现在的价值,就是现值&am…...
第1章 基础知识
1.1 机器语言 1.2 汇编语言的产生 用汇编语言编写程序的工作过程如下: 1.编写程序:汇编程序包括汇编指令、伪指令、其他符号,如下图。其中,“伪指令”并不是由计算机直接执行的指令,而是帮助编译器完成“编译”的符号。 2.编译:将汇编程序转换成机器码。 3.计算机执行。 …...
16.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Github Action
GitHub Actions 是 GitHub 提供的持续集成和持续部署(CI/CD)平台,它允许我们自动化软件开发工作流程。通过 GitHub Actions,我们可以构建、测试和部署代码,而无需手动干预。 一、基本概念 1.1 Workflow(工作流) 工作…...
MySQL 事务隔离级别详解
以下是 MySQL 支持的四种事务隔离级别及其特性,按并发安全性从低到高排列: 1. 读未提交 (Read Uncommitted) 问题: 脏读 (Dirty Read):事务可读取其他事务未提交的数据。不可重复读 (Non-repeatable Read)&am…...
A. Ambitious Kid
time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…...
C19-while循环及for循环等价引入
一 while的表达式 //while的表达式有三个 #include <stdio.h> int main() { int sum; int data1; //第一个表达式,条件的初始值while(data<100){ //第二个表达式,条件的临界值sumsumdata;data; //第三个表达式,条件变化}printf("0至100的和是:%d\n",sum);…...
华为盘古OS深度评测:构建AI自进化系统的实践密码
华为盘古OS通过分布式AI内核与自适应学习框架的深度耦合,重新定义操作系统级智能能力。实测显示其AI任务调度效率较传统系统提升17倍,本文从智能体编排、持续学习机制、端云协同架构三个维度,解析如何基于DevKit 3.0打造具备认知进化能力的下…...