微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows 服务中未调用 UDP 侦听器回调

如何解决Windows 服务中未调用 UDP 侦听器回调

我有一个 Windows 服务。作为初始化的一部分,它调用此 StartListener 方法,该方法打开一个 UDP 端口以进行侦听。我可以通过 netstat 确认端口正在侦听。但是当我发送消息时,回调永远不会触发。

        //Called by service on start
        public static void StartListener(int port)
        {
            if (udpClient != null)
            {
                udpClient.Close();
                udpClient = null;
            }
            try
            {
                udpClient = new UdpClient(31050);
                udpClient.BeginReceive(new AsyncCallback(recv),null);
                ControlService.log.WriteEntry("Listening on port " + port);
            }
            catch (Exception e)
            {
                ControlService.log.WriteEntry(e.Message);
            }
        }

        public static void recv(IAsyncResult res)
        {
            ControlService.log.WriteEntry("UDP Callback");
            //do actual things
        }

        //From other app
        public void SendBytes(byte[] bytes,IPEndPoint RemoteIpEndPoint)
        {
            try
            {
                udpClient.Send(bytes,bytes.Length,RemoteIpEndPoint);
            }
            catch { ... }
        }

我正在从一个统一应用程序移植它,该应用程序调用相同的 StartListener 方法,该方法确实有效。两种情况下的调用应用程序相同。

我是否遗漏了 Windows 服务可能需要的某些东西?

解决方法

这不是一个完整的答案,但希望能帮助其他有类似问题的人。

问题似乎是发件人是一个统一的应用程序。当我将一个发送 UDP 消息的快速 c# 应用程序放在一起时,它会被服务接收。出于同样的原因,当我使用该应用程序向旧的 Unity 接收器发送消息时,它不会通过。我的猜测是 Unity 在幕后做了一些事情,在正常的 UdpClient 行为之外包装/解包消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。