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
相关产品推荐
相关产品推荐

