如何从客户端 Android 应用程序调用在本地网络 PC 上运行的 gRPC 服务器?

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

在我的笔记本电脑上,我有一个 gRPC 服务器在 .NET 6 应用程序中运行,使用 Grpc.AspNetCore 2.40.0。在我的手机上,我有一个使用 Uno UI 框架构建的 .NET 6 Android 应用程序,使用 gRPC 客户端 GRPC.Net.Client 2.46.0。两者都在同一个本地网络上。

我希望能够从手机应用程序连接到 gRPC 服务器。

当我尝试在应用程序中连接时,它失败并显示错误:

{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 连接到 PC 的手机上运行的 Android 应用程序,使用
    adb reverse tcp:8080 tcp:7773
    通过 USB 与 PC 对话

然后连接成功,所以我知道问题是特定于尝试通过网络连接。

我可以从我的安卓手机上ping我电脑的本地网络IP。 gRPC 未使用 https,客户端正在尝试连接到

http://192.168.0.246:7773
。这是正确的地址吗?我也尝试过只使用
192.168.0.246:7771
但这导致 gRPC 客户端首先无法创建。

我尝试过使用Windows防火墙打开相关的入站连接端口,但我对此了解不多。防火墙有什么需要做的吗? gRPC 服务器在端口 7773 上运行。

是否需要做任何其他事情来允许 gRPC 客户端通过本地网络连接?

谢谢!

android .net network-programming grpc
2个回答
0
投票

想通了。我的服务器正在监听

localhost
,这意味着它只监听来自同一设备的连接。要监听任何连接,我必须将其更新为监听 0.0.0.0.

对于我正在使用的 ASP.NET Web 服务器,这是通过更新对

ConfigureKestrel
的调用以使用
ListenAnyIP
选项而不是
ListenLocalhost
选项来完成的。

为了帮助调试,我使用了 Wireshark 和

netstat -ab
.


-1
投票

我是 gRPC 的新手,我也在尝试通过 Asp.Net 核心 gRPC 服务项目连接在 Windows 机器上运行的 gRPC 服务器和在带有 .NET MAUI 应用程序的 Android 上运行的 gRPC 客户端。我也遇到了与“连接到子通道时出错”相同的异常。 您能否提供一些有关如何修复它的见解。

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