如何解决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 举报,一经查实,本站将立刻删除。