做一个windos服务和api搭配,获取电脑的mac地址

一个,windos,服务,api,搭配,获取,电脑,mac,地址 · 浏览次数 : 6

小编点评

**项目结构** * **Models** * None * **Views** * None * **Controllers** * MacSignalRController * **Dependencies** * Microsoft.AspNetCore.SignalR * Microsoft.AspNetCore.Mvc * Microsoft.AspNetCore.MemoryCache **程序** **App.cs** ```csharp using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace MyApp { public class Startup { public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // Configure services for the application. app.UseSignalR(); // Configure the application to use memory cache. app.UseMemoryCache(); // Configure the application to use the SignalR Hub. app.MapHub("/signalrhub"); } } } ``` **SignalRHub.cs** ```csharp using Microsoft.AspNetCore.SignalR; using System.Collections.Generic; using System.Threading.Tasks; namespace MacService.Controllers { public class SignalRHub : Hub { private readonly IHubContext _hubContext; private readonly List connectionIDs; private readonly IMemoryCache _memoryCache; private int num; public SignalRHub(IHubContext&hubContext, IMemoryCache memoryCache) { connectionIDs = new List(); _hubContext = hubContext; _memoryCache = memoryCache; } // Methods for handling client connections and messages } } ``` **使用说明** 1. 将此代码添加到您的应用程序中。 2. 创建一个名为 `MacClientAssist` 的应用程序配置项,并将其配置为信号 r服务。 3. 在您的前端应用程序中,使用 `[Hub]` decorating符将您的控制器绑定到 `/signalrhub` 路径。 4. 运行应用程序。 **其他提示** * 确保您的应用程序运行在 Windows 上的服务器上。 * 请确保您在生产环境中安装和配置 SignalR 服务。 * 请阅读 Microsoft 官方的 SignalR 文档以了解更多关于使用 SignalR 的信息。

正文

创建webapi项目,只是搭配服务用,什么三层mvc都不弄了,默认的模板直接用就好。

简单分析下,采用signalr通信来传递mac地址,所以先安装个signalr的包(如果简单操作的话可以不装最新的,微软自带一个,不过好像是弃用的)

using Microsoft.AspNetCore.SignalR;

创建一个继承HUB的辅助类,主要功能就是服务端和客户端通信

补充一下HUB类怎么写

 public class SignalRHub : Hub
    {
        private readonly IHubContext<SignalRHub> _hubContext;
        private readonly List<string> connectionIDs;
        private readonly IMemoryCache _memoryCache;
        private int num;

        public SignalRHub(IHubContext<SignalRHub> hubContext, IMemoryCache memoryCache)
        {
            connectionIDs = new List<string>();
            _hubContext = hubContext;
            _memoryCache = memoryCache;
        }


        #regionpublic void Mac1(string macMsg)
        {
            num++;
            if (!string.IsNullOrEmpty(macMsg) || num == connectionIDs.Count)
            {
                num = 0;
                _memoryCache.Set("mac", macMsg); // 存储mac值到内存缓存中
            }
        }
        #endregion


        #region/// <summary>
        /// 客户端连接之后立马执行
        /// </summary>
        /// <returns></returns>
        public override async Task OnConnectedAsync()
        {
            // 保存连接的客户端到上下文中
            connectionIDs.Add(Context.ConnectionId);
            await Clients.Caller.SendAsync("Connected", Context.ConnectionId);
            //添加到组
            await Groups.AddToGroupAsync(Context.ConnectionId, "Mac");
            await base.OnConnectedAsync();
        }

        public async Task<string> SendIP(string ip)
        {
            //await Clients.All.SendAsync("匹配IP", ip);//给所有的客户端发送IP进行匹配
            await _hubContext.Clients.Group("Mac").SendAsync("匹配IP", ip);
            await Task.Delay(2000);
            string mac = _memoryCache.Get<string>("mac"); // 从内存缓存中读取mac值
            return mac;
        }
        #endregion
    }
View Code

 

 

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

namespace MacService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MacSignalRController : ControllerBase
    {
        /// <summary>
        /// 辅助类注入进来
        /// </summary>
        private readonly SignalRHub _signalRHub;
        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="SignalRHub"></param>
        public MacSignalRController(SignalRHub SignalRHub)
        {
            _signalRHub = SignalRHub;
        }
        /// <summary>
        /// POST请求,传入ip比对客户端ip拿到mac地址
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<string> SendMessage([FromBody] string ip)
        {
            return await _signalRHub.SendIP(ip);
        }
    }
}
View Code

 

 写一个接口,给前端浏览器用,传入ip和安装了服务的电脑的ip对比,拿到对应的mac地址

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

namespace MacService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MacSignalRController : ControllerBase
    {
        /// <summary>
        /// 辅助类注入进来
        /// </summary>
        private readonly SignalRHub _signalRHub;
        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="SignalRHub"></param>
        public MacSignalRController(SignalRHub SignalRHub)
        {
            _signalRHub = SignalRHub;
        }
        /// <summary>
        /// POST请求,传入ip比对客户端ip拿到mac地址
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<string> SendMessage([FromBody] string ip)
        {
            return await _signalRHub.SendIP(ip);
        }
    }
}
View Code

 

因为有用到依赖注入,所以要在Program.cs文件进行注册

1.signalr   2.SignalRHub辅助类   3.MemoryCache 

    builder.Services.AddSignalR();
    builder.Services.AddScoped<SignalRHub>();
    builder.Services.AddMemoryCache();

 

还有要给signalr暴露出来让客户端可以连接,好像是这样解释吧,不知道怎么解释

     app.MapHub<SignalRHub>("/signalrhub");    

 

然后你的ip+端口+signalrhub  类似与:https://123.321.456.567:1234/signalrhub  这样,如下图则为成功

 


 

现在弄windows服务,这个博客园有大佬写了,我也是看的那个,这里贴个链接

使用.NET Core创建Windows服务详细步骤 - willingtolove - 博客园 (cnblogs.com)

 安装和卸载的命令发一下

@echo off 
chcp 65001 @title 安装windows服务 @echo off echo
= 安装服务! @echo off @sc create MacClientAssist binPath= "%~dp0MacClientAssist.exe" echo= 启动服务! @echo off @sc start MacClientAssist @echo off echo= 配置服务! @echo off @sc config MacClientAssist start= AUTO @echo off echo= 成功安装、启动、配置服务! @pause
@echo off
chcp 65001 @title 卸载Windows服务 @echo off echo 正在停止服务... @echo off @sc stop MacClientAssist echo 正在卸载服务... @echo off @sc delete MacClientAssist echo 服务已成功卸载。 @pause

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

 

与做一个windos服务和api搭配,获取电脑的mac地址相似的内容:

做一个windos服务和api搭配,获取电脑的mac地址

创建webapi项目,只是搭配服务用,什么三层mvc都不弄了,默认的模板直接用就好。 简单分析下,采用signalr通信来传递mac地址,所以先安装个signalr的包(如果简单操作的话可以不装最新的,微软自带一个,不过好像是弃用的) using Microsoft.AspNetCore.Signa

一个与 WSL2 建立远程的简单方法

前言 众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip。于是本机重启或重启 wsl 服务的时候会重新分配 ip。之前所作的端口转发,监听之类的都会失效。 而如果你搜索 “如何固定 wsl 的 ip”,又会得到一系列复杂的配置方法。 且不说是否有用,但这

window 安装多个低版本chrome测试

最近在用next13做一个简单的项目,需要兼容chrome 60+以上版本,为了方便测试,特意在公司的台式机上安装了低版本的chrome。 这里简单记录下高版本覆盖低版本的问题,这个方法不影响Windows系统内已安装的Chrome。 下载对应的版本 首先下载你想要的chrome版本,这里找到对应的

如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器之一Apache-Apollo服务器。

一、简介 最近,在做一个项目的时候,需要在线管理网络继电器,以前也做过硬件的项目,但是这样的项目不多。现在我想实现一个在线可以接受网络继电器发送的信号,也可以向网络继电器发送命令,控制其的运行。这个功能的实现需要物联网的支持,我在咨询了网络继电器卖家,想要在线实现网络硬件的管理有三种解决方案。 第一

Mac装机必备软件2023

码农一枚,Mac作为生产力工具已经有10多年了。 用Mac的原因除了系统清爽,逼格高之外,最主要还是因为作为一个资深全栈,要做Apple相关开发,必须用MacOS系统。😅 与Windows不同,MacOS上流行使用的软件很多都很小众,作者也不是大厂,但有很多却很实用,这里介绍几款我常用的免费软件。

我的 Windows 文件管理哲学

前言 作为一个不合格的 Geek,我经常面临把 Windows 弄崩溃的尴尬处境,我的系统因此重装了一遍又一遍……不过在一次次的重装中,我逐渐总结出了于我个人而言行之有效的文件管理哲学,在此略做总结。 管理方法 磁盘分区 我个人对磁盘分区没有什么特别的需求,现代的操作系统与电脑一般不会出现崩溃到不得

前端里那些你不知道的事儿之 【window.onload】

相信很多前端开发者在做项目时同时也都做过页面性能优化,这不单是前端的必备职业技能,也是考验一个前端基础是否扎实的考点,而性能指标也通常是每一个开发者的绩效之一。尤其马上接近年关,页面白屏时间是否过长、首屏加载速度是否达标、动画是否能流畅运行,诸如此类关于性能更具体的指标和感受,很可能也是决定着年底你能拿多少年终奖回家过年的晴雨表。

安全测试之探索 windows 游戏扫雷

扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次。通过动态调试,逆向和C来写一个扫雷辅助工具从而提高逆向与编码技能。

微前端中实现沙箱环境的方案调研

前言 在微前端实践过程中有一个必然会遇到的问题:全局作用域变量的污染问题,具体来说就是window对象挂载数据会被主子应用获取和修改导致数据相互污染问题,这时候如果能在应用之间做个数据隔离,最好能实现一个沙箱环境,对解决问题很有帮助。 iframe方案 说到沙箱隔离,首先想到的是iframe,自带数

语音信号处理中的“窗函数”

文章代码仓库:https://github.com/LXP-Never/window_fun 窗函数贯穿整个语音信号处理,语音信号是一个非平稳的时变信号,但“**短时间内可以认为语音信号是平稳时不变的,一般 10~30ms**。 对连续的语音分帧做STFT处理,等价于截取一段时间信号,对其进行周期性