套接字异常:没有到主机的路由

Posted

技术标签:

【中文标题】套接字异常:没有到主机的路由【英文标题】:Socket Exception : No route to host 【发布时间】:2021-08-25 12:25:15 【问题描述】:

谁能告诉我为什么 iPhone 11 在尝试通过 Internet 连接到设备时会阻止 Unity 应用程序使用 Wi-Fi 网络?而另一台具有相同 ios 版本和相同 Unity 应用程序的 iPhone 7 却没有这样做!

我正在使用 C# System.Net.Sockets 函数来制作 TCP 客户端应用程序,它在 Unity 模拟器和 android 设备中运行良好,这个问题只发生在我的 iPhone 11 上。

检查了所有的防火墙和限制,一切似乎都一样,但仍然得到相同的错误:SocketException: No route to host

这是我使用的功能:

    public string IP = "192.168.1.80"; // or a public IP that forwards the request to the specified Local IP via the chosen Port
    public Int32 Port = 5000;
    byte[] SendBuf;
    byte[] RecBuf;
    int i;
    TcpClient TcpClient1;
    NetworkStream serverStream;
    Stopwatch Time = new Stopwatch();

     public Int16 MyFunction(UInt16 A, UInt16 data)
    
        Int16 RetVal = 0;
        TcpClient1 = new TcpClient(AddressFamily.InterNetwork);
        TcpClient1.Connect(IP, Port);

        // here I write my code ...
        serverStream.Close();
        TcpClient1.Close();
        Time.Stop();
        return RetVal;
    

【问题讨论】:

我认为您必须为您的应用授予一些权限。 @BASKA 好的,但是如何? 您说您要连接到“通过 Internet 的设备”,但 192.168.x.x 是非 routanlw 网络,因此它必须与设备在同一个 wifi 上。是这样吗?响应表明该设备没有到 192.168.1.80 的路由,因此它不在该 IP 网络上。 应用程序可以通过本地网络访问设备 - 就像我在这里分配的 IP 一样 - 或者通过给应用程序设备的公共 IP 并在指定端口上进行端口转发以到达指定的 IP 地址。正如我所说的,问题不在这里,但在某些 iPhone 上它可以工作,而在其他 iPhone 上却不行! 然后检查这些设备的连接性;没有通往主机的路线意味着这一点;收到 ICMP 不可达消息或设备无法在其路由表中找到候选路由。 【参考方案1】:

当您通过与 PC 不同的网络连接手机时,可能会发生这种情况。不同的网络可以有不同的防火墙规则。

PC 通常通过内部网络(通常是以太网)连接。而手机一般都是通过WIFI连接,防火墙规则比较强。

【讨论】:

以上是关于套接字异常:没有到主机的路由的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure 中托管的 ASP.NET Core 5.0 MVC 站点调用 API/服务的间歇性套接字异常

运输层

网络编程--Socket(套接字)

Jenkins SSH 插件/SSH 代理插件:异常:超时:未建立套接字

没有这样的主机是已知的套接字连接

socket和http协议