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

t98cgbkg  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(143)

我在跨平台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#桌面应用程序,模拟硬件的行为用于开发目的。我可以从AvaloniaController连接到ServerSimulator,* 在Windows和Android上都是 *。这表明套接字代码确实可以在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上超时?

fwzugrvs

fwzugrvs1#

解决了.问题是,如果Android设备有另一个互联网连接,那么它无法解析IP;如果你把它放在飞行模式,然后连接到WiFi网络,它的作品.由于手机通过其SIM卡互联网,和模拟器通过主机PC的连接,他们都失败了.

相关问题