Android 上的 Xamarin 应用程序中的 TCP 套接字连接超时,但在桌面上则不然

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

我在跨平台 C# 应用程序 (Avalonia/Xamarin) 中尝试连接 TCP 套接字时遇到超时 - 但行为非常奇怪:

  • 服务器是一个硬件/工业设备。它充当 WiFi AP,客户端设备通过 TCP 套接字连接并控制它。
  • 现有客户端软件采用C#/WinForms编写。我们称之为 DesktopController。
  • 我现在正在 Avalonia 编写一个跨平台版本。我们称之为 AvaloniaController。
  • AvaloniaController 与 DesktopController 共享相同的(现有的)网络代码,并且在 Windows 上运行时可以连接套接字。然而,从Android,套接字连接总是超时
    System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (110): Connection timed out
  • 我还有“ServerSimulator”,这是一个 C# 桌面应用程序,可以模拟硬件的行为以用于开发目的。我可以从 Windows 和 Android 上的 AvaloniaController both 连接到 ServerSimulator。这表明套接字代码肯定可以在 Android 上运行 - 否则,我们将无法连接到 ServerSimulator。
  • AvaloniaController 在 Android 模拟器中运行时(与 Windows 上的 AvaloniaController 位于同一台物理 PC 上)也无法连接。这表明它不是特定于物理 Android 设备的东西。

连接代码很简单:

public void Connect(string host, int port)
{
    IPAddress ipAddress;
    IPAddress.TryParse(host, out ipAddress);
    IPEndPoint ipe = new IPEndPoint(ipAddress, port);

    try
    {
        _tcpSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

        // On Android, it pauses here for a bit & then times out/throws
        _tcpSocket.Connect(ipe);
    }
}

为什么这段代码能够连接 Windows->Hardware、Windows->ServerSimulator、Android->ServerSimulator...但在 Android->Hardware 上却超时?

android sockets xamarin tcp
1个回答
0
投票

解决了。问题是,如果 Android 设备有另一个互联网连接,则无法解析 IP;如果你将其设置为飞行模式并连接到 WiFi 网络,它就可以工作。由于手机通过 SIM 卡上网,而模拟器通过主机 PC 连接上网,所以都失败了。

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