Android应用跨局域网调用本地gRPC服务器失败求助
局域网gRPC客户端连接服务器故障排查方案
问题背景
- 服务器:Windows笔记本,基于.NET 6 + Grpc.AspNetCore 2.40.0,运行在7773端口,未启用HTTPS
- 客户端:Android应用,基于.NET 6 + Uno UI + Grpc.Net.Client 2.46.0,与服务器处于同一局域网
- 连接失败报错:
{ManagedException, High : Status(StatusCode="Unavailable", Detail="Error connecting to subchannel.", DebugException="System.Net.Sockets.SocketException (110): Connection timed out at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken) at Grpc.Net.Client.Balancer.Internal.SocketConnectivitySubchannelTransport.TryConnectAsync(CancellationToken cancellationToken) in /_/src/Grpc.Net.Client/Balancer/Internal/SocketConnectivitySubchannelTransport.cs:line 138")} - 已验证可成功连接的场景:
- 同一PC上运行的Windows应用客户端
- PC模拟器内的Android应用客户端
- USB反向代理(
adb reverse tcp:8080 tcp:7773)下的手机客户端
- 手机可ping通PC局域网IP,客户端尝试连接地址为
http://192.168.0.246:7773
防火墙补充设置
- 校验入站规则细节
打开Windows Defender防火墙高级设置,找到已添加的7773端口入站规则,逐一检查:- 作用域:确保「远程IP地址」设置为「任何IP地址」,或包含手机所在的局域网网段(如
192.168.0.0/24) - 协议和端口:确认协议为
TCP,本地端口指定7773,远程端口设为「所有端口」 - 高级选项:确保规则应用到当前使用的网络类型(如「专用」网络,对应你的局域网类型)
- 作用域:确保「远程IP地址」设置为「任何IP地址」,或包含手机所在的局域网网段(如
- 临时关闭防火墙测试
临时关闭Windows Defender防火墙,若此时连接成功,说明原防火墙规则存在疏漏,回到上一步重新配置 - 检查第三方防火墙
若安装了其他杀毒/防火墙软件(如360、腾讯电脑管家),需在对应软件中同步开放7773端口的TCP入站权限
其他必要配置项
- 修正服务器绑定IP
默认ASP.NET Core应用可能仅绑定localhost(127.0.0.1),无法接收局域网其他设备请求,需修改配置让服务器监听所有IP或指定局域网IP:- 在
Program.cs中添加Kestrel配置:builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(7773); // 监听所有IP的7773端口 // 或指定PC局域网IP:options.Listen(IPAddress.Parse("192.168.0.246"), 7773); }); - 或启动时用命令行参数指定:
dotnet run --urls=http://0.0.0.0:7773
- 在
- 确认客户端连接地址有效性
用PC端ipconfig命令确认当前局域网IPv4地址,确保客户端使用的地址与之一致;建议给PC设置静态局域网IP,避免动态IP导致的地址变化 - 排查局域网限制
- 检查路由器是否开启AP隔离功能,若开启需关闭(部分路由器默认开启,会阻止局域网设备互访)
- 确保PC和手机连接到同一WiFi频段(同为2.4G或5G,跨频段可能存在通信限制)
- gRPC客户端非HTTPS配置
因未使用HTTPS,需在客户端允许不安全的HTTP连接(仅用于开发测试,生产环境必须用HTTPS):var channel = GrpcChannel.ForAddress("http://192.168.0.246:7773", new GrpcChannelOptions { HttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator } });
内容的提问来源于stack exchange,提问作者Sophie
相关产品推荐
相关产品推荐

