首页
关于
友链
统计
推荐
在线工具
图标下载
Search
1
电视直播源 - 佛系更新 - m3u8
6,204 阅读
2
DIY智能电灯 - 小爱同学语音控制 - ESP8266
635 阅读
3
.NET 中文程序遇到英文操作系统,控制台输出乱码
585 阅读
4
私人NAS - 黑群晖搭建 - J1900
378 阅读
5
Git commit 注释规范
314 阅读
日常琐事
学习笔记
后端笔记
前端笔记
踩坑日记
DIY造物
Arduino
点灯科技
开放接口
种草好物
软件分享
实用工具
登录
Search
标签搜索
C#
.NET
mysql
.NET Core
GUID
MQTT
笔记
FRP
群晖
SQL
m3u8
Socket
WebAPI
小爱同学
ESP8266
blinker
API
Hmister
累计撰写
22
篇文章
累计收到
48
条评论
首页
栏目
日常琐事
学习笔记
后端笔记
前端笔记
踩坑日记
DIY造物
Arduino
点灯科技
开放接口
种草好物
软件分享
实用工具
页面
关于
友链
统计
推荐
在线工具
图标下载
搜索到
7
篇与
的结果
2025-02-10
MQTT类 - C# - .NET Core
一个常用的MQTT的操作类using System; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Security.Cryptography.X509Certificates; using MQTTnet; using MQTTnet.Client; using MQTTnet.Client.Options; using MQTTnet.Client.Ssl; public class MqttClientService { private IMqttClient _client; private MqttClientOptions _options; private readonly string _broker = "your-mqtt-broker"; // MQTT 服务器地址 private readonly int _port = 1883; // MQTT 端口(1883: TCP, 8883: TLS) private readonly string _clientId = "CSharpClient"; // MQTT 客户端ID private readonly string _username = "your-username"; // MQTT 账号 private readonly string _password = "your-password"; // MQTT 密码 private readonly int _reconnectDelay = 5000; // 断线重连间隔(毫秒) public event Action<string, string> OnMessageReceived; // 事件回调(主题,消息) public event Action<bool> OnConnectionChanged; // 连接状态回调(true=已连接,false=断开) public bool IsConnected { get; private set; } = false; // 连接状态 public MqttClientService() { InitializeMqttClient(); } private void InitializeMqttClient() { var factory = new MqttFactory(); _client = factory.CreateMqttClient(); _client.UseConnectedHandler(async e => { Console.WriteLine("MQTT 已连接到服务器"); IsConnected = true; OnConnectionChanged?.Invoke(true); // 触发连接成功事件 }); _client.UseDisconnectedHandler(async e => { Console.WriteLine("MQTT 连接丢失,尝试重连..."); IsConnected = false; OnConnectionChanged?.Invoke(false); // 触发连接断开事件 await Task.Delay(_reconnectDelay); await ConnectAsync(); }); _client.UseApplicationMessageReceivedHandler(e => { string topic = e.ApplicationMessage.Topic; string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); OnMessageReceived?.Invoke(topic, payload); // 触发消息接收事件 }); _options = new MqttClientOptionsBuilder() .WithTcpServer(_broker, _port) .WithClientId(_clientId) .WithCredentials(_username, _password) .WithCleanSession() .Build(); } /// <summary> /// 普通连接(非 SSL/TLS) /// </summary> public async Task ConnectAsync() { if (!_client.IsConnected) { try { await _client.ConnectAsync(_options, CancellationToken.None); } catch (Exception ex) { Console.WriteLine($"MQTT 连接失败: {ex.Message}"); await Task.Delay(_reconnectDelay); await ConnectAsync(); } } } public async Task SubscribeAsync(string topic) { if (_client.IsConnected) { await _client.SubscribeAsync(new MqttTopicFilterBuilder() .WithTopic(topic) .Build()); Console.WriteLine($"已订阅主题: {topic}"); } else { Console.WriteLine("MQTT 未连接,无法订阅主题"); } } public async Task PublishAsync(string topic, string message) { if (_client.IsConnected) { var msg = new MqttApplicationMessageBuilder() .WithTopic(topic) .WithPayload(message) .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce) .Build(); await _client.PublishAsync(msg); Console.WriteLine($"已发布消息: 主题={topic}, 内容={message}"); } else { Console.WriteLine("MQTT 未连接,无法发布消息"); } } public async Task DisconnectAsync() { if (_client.IsConnected) { await _client.DisconnectAsync(); IsConnected = false; OnConnectionChanged?.Invoke(false); // 触发连接断开事件 Console.WriteLine("MQTT 已断开连接"); } } } 使用示例using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var mqttService = new MqttClientService(); // 订阅消息接收事件 mqttService.OnMessageReceived += HandleMqttMessage; // 订阅连接状态变化事件 mqttService.OnConnectionChanged += HandleConnectionStatus; // **普通连接** await mqttService.ConnectAsync(); await mqttService.SubscribeAsync("test/topic"); // 定时检查连接状态 Task.Run(async () => { while (true) { Console.WriteLine($"当前 MQTT 连接状态: {(mqttService.IsConnected ? "已连接" : "未连接")}"); await Task.Delay(5000); } }); // 发布消息 await mqttService.PublishAsync("test/topic", "Hello MQTT Secure!"); Console.ReadLine(); await mqttService.DisconnectAsync(); } // **单独的回调方法 - 处理收到的消息** static void HandleMqttMessage(string topic, string message) { Console.WriteLine($"收到消息: 主题={topic}, 内容={message}"); } // **单独的回调方法 - 处理连接状态变化** static void HandleConnectionStatus(bool isConnected) { Console.WriteLine($"MQTT 连接状态变化: {(isConnected ? "已连接" : "断开连接")}"); } }
2025年02月10日
67 阅读
0 评论
0 点赞
2023-01-08
HTTP请求 - C#
使用过的一些HTTP请求代码,做个笔记
2023年01月08日
292 阅读
0 评论
0 点赞
2023-01-08
Socket简单通讯 - C#
一个简单好理解的Socket服务端和客户端
2023年01月08日
142 阅读
0 评论
1 点赞
2023-01-04
控制台的隐藏与显示 - C#
因为工作的原因,经常会跑一堆控制台程序,任务栏都跑满了,有时候又需要看打印的日志,找起来巨费劲。紧接着,一个脑洞出现,为什么我不能把这些控制台全部管理起来呢,我想显示那个就显示那个,想不看那个就不看那个。于是就有了下面的小工具,话不多说,直接上核心代码[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)] private static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow); [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //隐藏显示窗口 public static void WindowHide(string consoleTitle, int lpWindowName) { try { IntPtr a = FindWindow(null, consoleTitle); if (a != IntPtr.Zero) { var _a = ShowWindow(a, (uint)lpWindowName);//隐藏窗⼝ } else { MessageBox.Show($"{consoleTitle}未启用"); } } catch (Exception) { MessageBox.Show($"操作失败"); } } //调用 WindowHide(item, 5);//显示 WindowHide(item, 0);//隐藏关于ShowWindow的介绍,以下截图结果来源于百度 Demo地址: {anote icon="fa-github-square" href="https://github.com/Hmister/Console-Hidden.git" type="success" content="Github地址"/}
2023年01月04日
166 阅读
0 评论
0 点赞
2022-05-30
"IAuthorizationFilter" 简单使用 - .Net Core - WebAPI
为什么要做这个 最近在做权限验证的时候,开始使用JWT封装的一些验证,最后发现满足不了我的一些需求,而且改动起来也比较麻烦。经过几天的验证之后,绝对弃用JWTToken的验证,改用IAuthorizationFilter这个过滤器。 ## 最终效果 实现访问接口的时候,根据自定义的规则进行过滤用法 1、新建一个类,继承Attribute(.net特性,具体信息自行查阅)、IAuthorizationFilterpublic class ApiAuthorize : Attribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { string token = context.HttpContext.Request.Headers["Authorization"].ToString(); //具体过滤规则 } } 2、使用[TypeFilter(typeof(ApiAuthorize))] [HttpGet,Route("Test")] public async Task<JsonResult> Test() { return RenderSuccess(); }关于要使用TypeFilter的原因,因为我在ApiAuthorize里面构造了一些东西,需要需要这个才能引进去。 {callout color="#f0ad4e"} 以上是我自己的个人心得笔记,如有不对,请指正!!! {/callout}
2022年05月30日
213 阅读
0 评论
0 点赞
1
2