powershell 雅地关闭UDP监听器
在PowerShell中优雅地关闭UDP监听器意味着你需要一种机制来安全地停止正在运行的UdpClient实例。由于UdpClient类本身没有提供直接的停止或关闭方法,你需要通过其他方式来实现这一点。通常,这涉及到在监听循环中添加一个检查点,以便在接收到停止信号时能够退出循环。
下面是一个PowerShell脚本示例,它展示了如何创建一个可以优雅关闭的UDP监听器:
# 导入必要的命名空间
Add-Type -TypeDefinition @"
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;public class UdpListener
{
private UdpClient listener;
private IPEndPoint localEndPoint;
private CancellationTokenSource cts;public UdpListener(int port)
{
listener = new UdpClient(port);
localEndPoint = new IPEndPoint(IPAddress.Any, port);
cts = new CancellationTokenSource();
}public void Start()
{
// 使用CancellationToken来安全地停止监听循环
Task.Run(() => ListenAsync(cts.Token));
}public void Stop()
{
// 请求取消监听任务
cts.Cancel();
}private async Task ListenAsync(CancellationToken token)
{
try
{
while (!token.IsCancellationRequested)
{
// 阻塞直到接收到数据或取消操作
byte[] receivedBytes = await listener.ReceiveAsync().ConfigureAwait(false);
IPEndPoint remoteEndPoint = (IPEndPoint)listener.Client.RemoteEndPoint;// 处理接收到的数据
Console.WriteLine($"Received data from {remoteEndPoint}: {Encoding.ASCII.GetString(receivedBytes)}");
}
}
catch (OperationCanceledException)
{
// 监听被取消,正常退出
Console.WriteLine("UDP listener stopped gracefully.");
}
catch (Exception ex)
{
// 处理其他异常
Console.WriteLine($"An error occurred: {ex.Message}");
}
finally
{
// 关闭UdpClient并释放资源
listener.Close();
listener.Dispose();
}
}
}
"@ -ReferencedAssemblies System.Net.Sockets, System.Threading.Tasks# 创建UDP监听器实例
$udpListener = New-Object UdpListener -ArgumentList 11000# 开始监听
$udpListener.Start()# 模拟一些工作,比如等待用户输入
Console.WriteLine("Press Enter to stop the UDP listener...")
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")# 停止监听器
$udpListener.Stop()
在这个脚本中,我们创建了一个UdpListener类,它使用CancellationTokenSource来管理监听循环的生命周期。Start方法启动一个异步任务来执行监听操作,而Stop方法通过调用CancellationTokenSource.Cancel来请求停止监听。
监听循环在ListenAsync方法中实现,它使用CancellationToken来检查是否需要停止。如果收到取消请求,监听循环将退出,并在finally块中关闭和释放UdpClient资源。
在脚本的最后部分,我们模拟了开始监听、等待用户输入(通过按Enter键),然后停止监听的过程。当你按下Enter键时,监听器会优雅地关闭,并输出一条消息来确认这一点。
请注意,这个脚本是一个简单的示例,用于演示如何优雅地关闭UDP监听器。在实际应用中,你可能需要添加额外的错误处理和资源管理逻辑。
相关文章:
powershell 雅地关闭UDP监听器
在PowerShell中优雅地关闭UDP监听器意味着你需要一种机制来安全地停止正在运行的UdpClient实例。由于UdpClient类本身没有提供直接的停止或关闭方法,你需要通过其他方式来实现这一点。通常,这涉及到在监听循环中添加一个检查点,以便在接收到停…...
Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御
Google Cloud 的 2024 年威胁范围报告预测了云安全的主要风险,并提出了加强防御的策略。 该报告由 Google 安全专家撰写,为寻求预测和应对不断变化的网络安全威胁的云客户提供了宝贵的资源。 该报告强调,凭证滥用、加密货币挖矿、勒索软件和…...
【算法题】102. 二叉树的层序遍历
题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2:…...
【龙年大礼】| 2023中国开源年度报告!
【中国开源年度报告】由开源社从 2015 年发起,是国内首个结合多个开源社区、高校、媒体、风投、企业与个人,以纯志愿、非营利的理念和开源社区协作的模式,携手共创完成的开源研究报告。后来由于一些因素暂停,在 2018 年重启了这个…...
本地搭建three.js官方文档
因为three.js官网文档是国外的网站,所以你没有魔法的情况下打开会很慢,这时我们需要在本地搭建一个官方文档便于我们学习查看。 第一步:首先我们先访问GitHub地址 GitHub - mrdoob/three.js: JavaScript 3D Library. 下载不下来的小伙伴们私…...
【seata自动化治愈数据库问题解决方案】
wu-database-lazy-seata-cure-plus-starter 描述 针对saas 数据库隔离情况下,每次版本迭代都需要重新修改对应的数据库,对于升级与运维存在一定的难度,那么这个数据库治愈框架来了,使用场景如下 1.数据库不存在自动创建数据库 …...
Node.js之npm单独与批量升级依赖包的方式
Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…...
66.加一
66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入ÿ…...
UI自动化之Poco常用断言方式
实际上用到的几种写断言的方式: 1.验证UI界面(断言图片是否存在,UI页面不稳定情况下,图片识别效率不高) assert_exists assert_not_exists 2.验证数值(断言传入的两个值(数字或者string)是否相等ÿ…...
c语言_实现类class的功能 实例
c语言_实现类class的功能 实例 1.需求与背景2.实例1.类的头文件 class_A.h2.类的实现 class_A.c3.引用4.编译与运行 3.总结 1.需求与背景 使用C , python语言久了, 发现 类 class写代码逻辑更方便, 简洁. 封装的API更加易用; 内核代码中, 也经常看到类似类的封装. 自己尝试实现…...
[2024]常用的pip指令
[2024]常用的pip指令 HI,这里是肆十二,好久不见,大家! 新年好! pip是Python的包管理工具,它可以用来安装、升级、卸载Python包。以下是一些常用的pip指令: 安装包: bash复制代码…...
【Java EE初阶十二】网络编程TCP/IP协议(二)
1. 关于TCP 1.1 TCP 的socket api tcp的socket api和U大片的socket api差异很大,但是和前面所讲的文件操作很密切的联系 下面主要讲解两个关键的类: 1、ServerSocket:给服务器使用的类,使用这个类来绑定端口号 2、Socket…...
Idea Git Review插件
idea git plugin 添加了一些常用的小插件 可以右键打开git bash窗口 可以右键选中文字点击baidu fanyi 可以通过搜索git用户名 指定开始时间查询某个版本自己提交的所有代码文件 可以通过点击蓝色行数,跳转到指定的改动代码块 资源地址: git-pl…...
python的turtle可以定义多个海龟对象
import turtle as t t.color(purple) t.right(10) t.fd(100) t1 t.Turtle() #t1.color(red) t1.left(10) t1.fd(100) t2 t.Turtle() #t2.color(green) t2.left(20) t2.fd(100) t3 t.Turtle() #t3.color(blue) t3.left(30) t3.fd(100) python的turtle可以定义多个海龟对象…...
LocalAI 部署(主要针对 mac m2 启动)
LocalAI 部署 介绍 LocalAI 是免费的开源 OpenAI 替代方案。 LocalAI 充当 REST API 的直接替代品,与本地推理的 OpenAI API 规范兼容。 它无需 GPU,还有多种用途集成,允许您使用消费级硬件在本地或本地运行 LLM、生成图像、音频等等&#…...
Swift Combine 管道 从入门到精通三
Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据,操作符对该数据做出响应并有可能更改它,订阅者请求并接收这些数据。 这…...
【RISC-V DSP设计】基于CEVA DSP架构的指令集分析(二)-函数列表
目录 表3-1:定点滤波器功能 表3-2:定点快速傅里叶变换(FFT)函数 表3-3:定点数学函数 表3-4:定点三角函数 表3-5:定点向量函数 表3-6:定点矩阵函数 表3-7:浮点滤波…...
蓝桥杯(Web大学组)2022国赛真题:水果消消乐
思路: 记录点击次数,点击次数为1时,记录点击下标(用于隐藏or消除)、点击种类,点击次数为2时,判断该下标所对应种类与第一次是否相同 相同:两个都visibility:hidden (占…...
LeetCode--代码详解 155.最小栈
155.最小栈 题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…...
第6讲后端鉴权拦截器实现
后端鉴权拦截器实现 package com.java1234.interceptor;import com.java1234.util.JwtUtils; import com.java1234.util.StringUtil; import io.jsonwebtoken.Claims; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerI…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
