创建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地址的更多相关文章

  1. java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名

    package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...

  2. 【C++】【纯代码】获取电脑的mac地址

    bool GetMacAddress(CString &LanMAC) { #define MAX_ADAPTER_NAME_LENGTH 256 #define MAX_ADAPTER_DE ...

  3. Unity网络通讯(一)获取计算机的MAC地址

    1 string GetMac() { string mac = ""; mac = GetMacAddressBySendARP(); return mac; } [DllImp ...

  4. C#开发BIMFACE系列8 服务端API之获取文件上传状态信息

    系列目录     [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...

  5. C#开发BIMFACE系列10 服务端API之获取文件下载链接

    系列目录     [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,默认场景下需要下载该源文件,下载文件一般需要知道文件的下载链接即可.BIMACE平台提供 ...

  6. C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...

  7. C#开发BIMFACE系列7 服务端API之获取文件信息列表

    系列目录     [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...

  8. C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...

  9. C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性

    系列目录     [已更新最新开发文章,点击查看详细] 在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性.不同的构建也有可能包含相同的属性. 上图中 ...

  10. C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息

    系列目录     [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...

随机推荐

  1. Android复习(三)清单文件中的元素——>uses-configuration、uses-library、uses-permission、uses-permission-sdk-23

    <uses-configuration> 语法: <uses-configuration android:reqFiveWayNav=["true" | &quo ...

  2. PG 的 MergeJoin 就是鸡肋

    好久没写博客,平时工作非常忙,而且现在对接的应用基本都是微服务架构. 微服务这种架构平时也很难遇到复杂SQL,架构层面也限制了不允许有复杂SQL,平时处理的都是简单一批的点查SQL. 基本上优化的内容 ...

  3. jarvisoj_level2_x64 1 writeup and blog

    Here i finish the jarvisoj_level2_x64 1 challenge in buuctf and here is some writeup (i use English ...

  4. TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) 补题记录(A-E)

    AtCoder Beginner Contest 377 A - Rearranging ABC 字符串有ABC三个字母即可. #include<bits/stdc++.h> using ...

  5. AOT使用经验总结

    一.引言 站长接触 AOT 已有 3 个月之久,此前在<好消息:NET 9 X86 AOT的突破 - 支持老旧Win7与XP环境>一文中就有所提及.在这段时间里,站长使用 Avalonia ...

  6. cgo:go数组转c数组调用c函数

    package main /* #include <stdio.h> void processInt2DArray(int* arr, int rows, int cols) { for ...

  7. PostgreSQL模拟Oracle dba_objects

    PostgreSQL模拟Oracle dba_objects查询出schema下所有的用户自定义对象 创建测试数据 psql -U postgres create user test password ...

  8. C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  9. CF1019C Sergey's problem

    CF1019C Sergey's problem 很巧妙的构造题. 思路 首先我们可以把这题分成两个部分: 解决覆盖问题 解决边冲突问题 \(vis_i\) 为 \(i\) 点是否被覆盖的标记,\(c ...

  10. Socket Tcp高密集信息广播转发强度测试

    在有些场中存在着大量的消息广播转发,为了了解.net socket tcp在这方面的性能表现,所以做了一个比较极端信息广播转发强度测试.测试场景是以400个连接信息相互广播为测试用例就是当其中一个连接 ...