C# UDPClient 未收到数据

问题描述 投票:0回答:1

我正在通过 C# 的 UdpClient 类为我的大学作业实现网络连接(也使用 UWP,这很重要)。 一开始我只是想通过发送消息来测试一下:

        async private void HostButtonClicked(object sender, RoutedEventArgs e)
        {
            // ....some UI-related code
            NetworkManager.client = new UdpClient(5555);
            NetworkManager.client.EnableBroadcast = true;

            var result = await NetworkManager.client.ReceiveAsync();
            message = Encoding.UTF8.GetString(result.Buffer);
            // ....UI code omitted for brevity
        }

        async private void SendMessage(object sender, RoutedEventArgs e)
        {
            string ipString = InputIP.Text;
            message = InputText.Text;

            NetworkManager.client = new UdpClient();
            NetworkManager.client.EnableBroadcast = true;
            byte[] data = Encoding.UTF8.GetBytes(message);
            IPEndPoint remotePoint;
            try
            {
                 remotePoint = new IPEndPoint(IPAddress.Parse(ipString), 5555);
            }
            catch (FormatException exception)
            {
                return;
            }
            await NetworkManager.client.SendAsync(data, data.Length, remotePoint);
        }

代码说明:这是两种排除方法。如果一个被调用,另一个则不会(菜单中有一个选择,例如发送/接收消息)。因此,即使要测试应用程序,也需要至少打开2个副本

我在电脑上测试时效果很好。

然后,当我尝试在同一 LAN 内的多台计算机上或通过 ZeroTier(提供虚拟 LAN 的应用程序)测试它时,由于某种原因它不起作用,即使数据是在 Wireshark 中发送/接收的,但未读取通过应用程序。

接收端Wireshark捕获示例(通过ZeroTier网络接口): wireshark capture

在发送端可以看到相同的情况(尽管当我尝试从笔记本电脑或任何其他设备发送消息时未用于开发此应用程序,它甚至不发送它,这意味着没有wireshark活动,看起来就像奇怪的 Windows 行为,甚至不让应用程序发送数据!所以现在我仅限于从我的主 PC 发送到其他人,或使用一些第三方应用程序行ncat),这意味着它是不是网络问题。

这可能是防火墙UAC问题,但我已经尝试禁用它们,但没有效果。也不应该是网络问题,因为双方 Wireshark 都会捕获传入/传出数据包。

也许问题出在Windows对UWP应用程序的处理上(我的意思是Windows将它们放在沙箱中)?但这只是我的猜测

UPD1:我刚刚测试了我的理论,使用普通控制台应用程序作为客户端时一切正常,所以它一定是UWP的问题。 proof

c# .net uwp udp udpclient
1个回答
0
投票

看来我解决了这个问题。问题确实出在 UWP 上。为了使它开始正常工作,我所做的唯一一件事是我选中了应用程序清单中的一些框,如下所示。虽然不确定“企业身份验证”,但如果您正在寻找答案,请尝试使用互联网/本地客户端服务器。 image

© www.soinside.com 2019 - 2024. All rights reserved.