做一个windos服务和api搭配,获取电脑的mac地址
创建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;
} #region 收
public 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
}

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);
}
}
}
写一个接口,给前端浏览器用,传入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);
}
}
}
因为有用到依赖注入,所以要在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地址的更多相关文章
- java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...
- 【C++】【纯代码】获取电脑的mac地址
bool GetMacAddress(CString &LanMAC) { #define MAX_ADAPTER_NAME_LENGTH 256 #define MAX_ADAPTER_DE ...
- Unity网络通讯(一)获取计算机的MAC地址
1 string GetMac() { string mac = ""; mac = GetMacAddressBySendARP(); return mac; } [DllImp ...
- C#开发BIMFACE系列8 服务端API之获取文件上传状态信息
系列目录 [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...
- C#开发BIMFACE系列10 服务端API之获取文件下载链接
系列目录 [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,默认场景下需要下载该源文件,下载文件一般需要知道文件的下载链接即可.BIMACE平台提供 ...
- C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...
- C#开发BIMFACE系列7 服务端API之获取文件信息列表
系列目录 [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...
- C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...
- C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性
系列目录 [已更新最新开发文章,点击查看详细] 在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性.不同的构建也有可能包含相同的属性. 上图中 ...
- C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息
系列目录 [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...
随机推荐
- select语句
SELECT语句可以从表中选择数据 SELECT <列名1>,<列名2> as "aaa" FROM <表名>; 查询两列数据SELECT * ...
- 新手入门使用pinia
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 使用 GitLab 账号登陆 KubeSphere
作者:李帅 介绍 KubeSphere 多租户是实际生产使用中非常需要的一个功能,该功能满足不同用户登陆 KubeSphere 平台的需求.比如开发,运维,测试都需要登陆 KubeSphere 平台, ...
- vue axios的使用及操作
引入axios 并设置原型 Vue.prototype.$axios = axios; 在其他地方就可以this.$axios使用了 let param = _this.$qs.string ...
- NOIP2024模拟赛7:纯粹当下
NOIP2024模拟赛7:纯粹当下 今日挂分:95pts...... T2 \(T\) 组数据, 每组给定 \(n,k,f,a_i\), 一个序列 \(b\) 满足 \(b_i \in [a_i-k, ...
- cnblogs内容同步到51cto上的说明(声明)
51CTO网站上的blog地址为:https://blog.51cto.com/u_15642578 该地址是个人在博客园cnblogs上的同步账号(https://cnblogs.com/xyz), ...
- 2.17 新手必看的Linux服务器管理和维护注意事项
本节介绍有关服务器管理和维护过程中的一些注意事项,都是笔者的经验之谈,相信对新手会有一定的启发和帮助. 很多初学者接触Linux 时间不长,还未完整地学习一遍 Linux,理解本节内容可能有些困难,可 ...
- 5.Kubeadm和二进制方式对比
Kubeadm方式搭建K8S集群 安装虚拟机,在虚拟机安装Linux操作系统[3台虚拟机] 对操作系统初始化操作 所有节点安装Docker.kubeadm.kubelet.kubectl[包含mast ...
- Air780E量产binpkg文件如何获取
今天我们学习Air780E量产binpkg文件如何获取: 一.背景 最近luatos开发客户增多,客户在量产烧录的时候需要binpkg文件,但是有些客户不知道binpkg文件是什么,在哪里获取,是 ...
- Redis之客户端工具RedisInsight
RedisInsight简介 RedisInsight是Redis官方出品的可视化管理工具,可用于设计.开发.优化你的Redis应用.支持深色和浅色两种主题,界面非常炫酷!可支持String.Hash ...