惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
T
The Blog of Author Tim Ferriss
量子位
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
小众软件
小众软件
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
美团技术团队
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security

博客园 - 网络来者

Element Plus 多页面后台与 ASP.NET Core API 从零手敲教程 从零创建 MESTOOLS 消息弹窗跟练教程 uni app开发一个子页面 MES物料分摊 墨西哥 嘉兴 兼容车牌摄像头 和 tplink 摄像头的sdk开发包 集成 训练数字识别模型 tplink摄像头监控 mes测试机 redis vue学习 vue 系统文件结构 第一个服务 c# 开发相关 openclaw 安装 c# 版本号 oracle 触发器 脚本方式安装Python 特定版本 idea 激活 Chrome MCP Server mcp ok mcp_server RepositoryItemGridLookUpEdit 使用 ok devexpress gridcontrol表格知识 winfrom 弹文本框 松下贴片机解锁 Serilog日志组件使用 git 使用
udp server 监听服务
网络来者 · 2026-03-31 · via 博客园 - 网络来者
using System;
using System.Net;
using System.Net.Sockets;
using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;

namespace MyDelayService
{
    public partial class DelayTaskService : ServiceBase
    {
        private Task _udpListenerTask;
        private CancellationTokenSource _cts;

        // UDP 监听端口(可自己改)
        private readonly int _udpPort = 8888;
        private UdpClient _udpServer;

        public DelayTaskService()
        {
            InitializeComponent();
            ServiceName = "MyUdpEchoService";
        }

        protected override void OnStart(string[] args)
        {
            WriteLog("===== UDP 回声服务已启动 =====");

            _cts = new CancellationTokenSource();
            _udpListenerTask = RunUdpEchoServerAsync(_cts.Token);
        }

        protected override void OnStop()
        {
            WriteLog("===== 服务正在停止 =====");
            _cts?.Cancel();
            _udpServer?.Close();
            _udpListenerTask?.Wait();
            WriteLog("===== 服务已停止 =====");
        }

        /// <summary>
        /// UDP 回声服务端:收到什么就原样发回什么
        /// </summary>
        private async Task RunUdpEchoServerAsync(CancellationToken token)
        {
            try
            {
                _udpServer = new UdpClient(_udpPort);
                WriteLog($"UDP 监听端口:{_udpPort}");

                while (!token.IsCancellationRequested)
                {
                    try
                    {
                        // 等待客户端消息
                        var result = await _udpServer.ReceiveAsync();
                        byte[] clientData = result.Buffer;
                        IPEndPoint clientEp = result.RemoteEndPoint;

                        string msg = System.Text.Encoding.UTF8.GetString(clientData);
                        WriteLog($"【接收】{clientEp.Address}:{msg}");

                        // ======================
                        // 关键:原样返回给客户端
                        // ======================
                        await _udpServer.SendAsync(clientData, clientData.Length, clientEp);
                        WriteLog($"【返回】{clientEp.Address}:{msg}");
                    }
                    catch (Exception ex)
                    {
                        if (!token.IsCancellationRequested)
                            WriteLog($"UDP 异常:{ex.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog($"UDP 服务失败:{ex.Message}");
            }
        }

        /// <summary>
        /// 写日志
        /// </summary>
        public void WriteLog(string msg)
        {
            try
            {
                XLog.XTrace.WriteLine(msg);
            }
            catch { }
        }
    }
}

posted @ 2026-03-31 10:44  网络来者  阅读(4)  评论()    收藏  举报