如何在后台实现UDP监听器?(可用于log4net)

 kimjizi 发布于 2023-01-11 13:24

我想UDPListener在后台运行它:

// launch this in a background thread
private static void UDPListen()
{
    IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0)
    using( var udpClient = new UdpClient(10000)) 
    {
       while (true)
       {
           var buffer = udpClient.Receive(ref remoteEndPoint);
           var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer);
           // ...
       }
    }
}

我可以把它放在一个Task.Run()并在while()循环中运行吗?

1 个回答
  • 这是我在阅读后进行设置的方法.非常简单!

    异步方法

        private static void UDPListener()
        {
            Task.Run(async () =>
            {
                using (var udpClient = new UdpClient(11000))
                {
                    string loggingEvent = "";
                    while (true)
                    {
                        //IPEndPoint object will allow us to read datagrams sent from any source.
                        var receivedResults = await udpClient.ReceiveAsync();
                        loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer);
                    }
                }
            });
        }
    

    appenderlog4net的 config文件应设置为一样的东西:

    </log4net>
        <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
            <remoteAddress value="127.0.0.1" />
            <remotePort value="11000" />
            <layout type="log4net.Layout.PatternLayout, log4net">
                <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
    
        <root>
            <appender-ref ref="UdpAppender" />
    
        </root>
    </log4net>
    

    同步方法

    与上述asynchronous方法一样,这也可以在synchronous方法中以非常类似的方式实现:

        private static void UDPListener()
        {
            Task.Run(() =>
            {
                using (var udpClient = new UdpClient(11000))
                {
                    string loggingEvent = "";
                    while (true)
                    {
                        //IPEndPoint object will allow us to read datagrams sent from any source.
                        var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
                        var receivedResults = udpClient.Receive(ref remoteEndPoint);
                        loggingEvent += Encoding.ASCII.GetString(receivedResults);
                    }
                }
            });
        }
    

    2023-01-11 13:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有