powershell 雅地关闭UDP监听器

这篇具有很好参考价值的文章主要介绍了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监听器。在实际应用中,你可能需要添加额外的错误处理和资源管理逻辑。

文章来源地址https://www.toymoban.com/news/detail-832855.html

到了这里,关于powershell 雅地关闭UDP监听器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android手势监听、触摸监听器、onTouchListener

    一次点击事件(onClickListener)由 一次down事件,多次move事件和一次up事件构成,move事件出现的次数由用户的按压效果决定。down表示手势事件开始,up表示结束,move则代表着过程。此时代码中onTouchLishtener方法中返回的结果为ture,则表示拦截用户的该次行为,由此方法进行处理

    2024年02月04日
    浏览(31)
  • watch监听器三种监听方式

    1、普通监听( 无法监听到第一次绑定的变化 ) 这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。 2、普通监听( 可以监听到第一次绑定的变化) 给 text 绑定了一个handler方法,之前我们写的 watch 方法其实默认写的就是

    2024年02月15日
    浏览(30)
  • Flowable监听器

    本人最近在找工作,有推荐的小伙伴私我,不胜感激。 开始、结束节点 连线节点 节点的开始和结束 网关的开始和结束 中间事件的开始和结束 开始时间结束或结束事件开始 Event事件 start 开始 take 启用 end 结束 类型 类:Class:com.sgp.StartListeners 类名全限定 监听器类上无论是否

    2024年02月16日
    浏览(26)
  • 计算属性和监听器

    计算属性是Vue中非常常用的一个概念,它能够根据现有的数据直接生成一个新的数据进行展示和操作。在Vue的实例中,可以使用 computed 来定义计算属性。 例如,我们有一个Vue实例 vm ,其中有一个数据 message ,我们可以通过计算属性 reversedMessage 来生成消息的反转字符串: 在

    2024年02月15日
    浏览(26)
  • Kafka 监听器详解

    Kafka Assistant 是一款 Kafka GUI 管理工具——管理Broker,Topic,Group、查看消费详情、监控服务器状态、支持多种消息格式。 你需要将 advertised.listeners (如果你使用Docker镜像,则为 KAFKA_ADVERTISED_LISTENERS )设置为外部地址(host/IP),以便客户端可以正确地连接到它。否则,他们会尝试

    2024年02月06日
    浏览(29)
  • 认识监听器(Listener)

    监听器是什么? 监听器(Listener)是一种运行在后台的程序,它主要用于监控某些事件在系统中的发生,并且根据这些事件做一些特定的处理。在Web应用程序中,监听器可以观察ServletContext、HttpSession以及ServletRequest等对象的变化,以便于在这些对象变化时进行相应的处理。监

    2024年02月02日
    浏览(25)
  • 【JavaWeb】9—监听器

    ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆 可见Java设计模式中的观察者模式。 观察者:监控『被观察者』

    2023年04月09日
    浏览(30)
  • Servlet的监听器

    Servlet常用的监听器 ServletContextAttributeListener 用来感知 ServlerContext 对象属性变化,比如添加或删除属性变化 ServletContextListener 用来感知 ServlerContext 对象的创建和销毁的 ServletRequestListener 可以用来监听感知 ServletRequest 对象的创建和销毁的 ServletRequestAttributeListener 用来感知 Serv

    2024年02月17日
    浏览(30)
  • SpringBoot 监听器

    Spring的监听器也可以说是一种观察者模式,它能实现事件与事件监听者直接的解耦,在Spring中监听器的实现主要有一下重要组件: ApplicationListener:事件监听者,观察者; ApplicationEvent:Spring 事件,记录事件源、事件内容、时间等数据; 有些场景事件主体主要是String或基本类

    2024年02月09日
    浏览(28)
  • [Java]监听器(Listener)

    监听器就是监听某个对象的的状态变化的组件 监听器的相关概念: 事件源: 被监听的对象 ----- 三个域对象 request session servletContext 监听器 : 监听事件源对象的状态的变化都会触发监听器 注册监听器 : 将监听器与事件源进行绑定 响应行为 : 监听器监听到事件源的状态变化时

    2023年04月22日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包