我在跨平台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上超时?
1条答案
按热度按时间fwzugrvs1#
解决了.问题是,如果Android设备有另一个互联网连接,那么它无法解析IP;如果你把它放在飞行模式,然后连接到WiFi网络,它的作品.由于手机通过其SIM卡互联网,和模拟器通过主机PC的连接,他们都失败了.