You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP应用中UdpClient无法接收数据,如何解决?

UWP中UdpClient接收数据卡住的解决方法

问题根源

UWP应用的网络权限模型、线程调度逻辑和传统.NET控制台应用存在差异:

  • 默认无网络访问权限,同步网络操作会被静默拦截
  • 同步阻塞方法(如Receive())会卡死UI线程,导致程序无法正常响应

解决步骤

1. 配置网络权限

打开Package.appxmanifest文件,添加必要的网络权限:

  • 勾选专用网络(客户端和服务器)
  • 勾选公用网络(客户端和服务器)
    可根据实际场景调整权限范围,但至少需要对应网络环境的客户端权限。

2. 用异步API替代同步阻塞方法

UWP推荐使用异步网络操作,避免阻塞UI线程。修改代码为异步版本:

private async Task StartUdpListening(int port)
{
    using var udp = new UdpClient(port);
    var groupEP = new IPEndPoint(IPAddress.Any, port);
    
    while (true)
    {
        Trace.WriteLine("Waiting for broadcast");
        var result = await udp.ReceiveAsync();

        Trace.WriteLine($"Received broadcast from {result.RemoteEndPoint} :");
        Trace.WriteLine($" {Encoding.ASCII.GetString(result.Buffer, 0, result.Buffer.Length)}");
    }
}

在合适的初始化时机调用该异步方法(避免直接在UI线程执行无限循环,可结合Task.Run或后台任务):

// 示例:在页面加载时启动监听
_ = StartUdpListening(你的端口号);

3. 额外注意事项

  • 若需接收多播数据,需调用JoinMulticastGroup方法加入对应组播地址
  • 确保系统防火墙允许UWP应用通过目标端口接收数据
  • 避免在UI线程执行长时间运行的逻辑,异步方法需正确使用await关键字

内容的提问来源于stack exchange,提问作者Optional Option

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:35:18