Iphone 如何确定通过内部网(iOS)的可达性

Iphone 如何确定通过内部网(iOS)的可达性,iphone,ios,ipad,Iphone,Ios,Ipad,我经常使用AFNetworking和Reachability,但它总是用于检查internet连接。如何判断iOS设备是否连接到没有internet连接的WLAN 我必须能够实时了解可达性状态 *只是澄清一下: 我不想检查是否可以上网。 我想检查设备是否已连接到WLAN *将LAN更改为WLAN以澄清可访问性涉及到两种网络连接,即WWAN(小区连接)和WiFi。我猜你说的是通过WiFi连接 试着这样做: -(BOOL)isWifiRouterConnected { BOOL return

我经常使用AFNetworking和Reachability,但它总是用于检查internet连接。如何判断iOS设备是否连接到没有internet连接的WLAN

我必须能够实时了解可达性状态

*只是澄清一下:

我不想检查是否可以上网。 我想检查设备是否已连接到WLAN


*将LAN更改为WLAN以澄清可访问性涉及到两种网络连接,即WWAN(小区连接)和WiFi。我猜你说的是通过WiFi连接

试着这样做:

-(BOOL)isWifiRouterConnected
{
    BOOL returnValue = NO;
    //test for a wifi connection
    Reachability *wifiReachability = [Reachability reachabilityForLocalWiFi];
    BOOL wifiReachable = [wifiReachability isReachableViaWiFi];

    //test for connection to google
    if( wifiReachable )
    {
        returnValue = [Reachability reachabilityWithHostname:@"google.com"];
    }
    return returnValue;
 }
看一看,然后

不要使用可达性来预先启动您的连接,而只是启动您的请求

如果您坚持在发出请求之前使用可访问性测试连接,请使用Jonah描述的方法,并使用您唯一的内部可访问主机名进行测试

例如:

    // ... 
    if (wifiReachable) {
        returnValue = [Reachability reachabilityWithHostname:@"internalserver.example.com"];
    }
    return returnValue;
}

每个人都使用的标准
可达性
类非常具有欺骗性。它试图通过猜测来确定是否可以访问主机。例如,如果您想知道当前是否能够访问www.google.com,请调用
[Reachability Reachability-withhostname:@“www.google.com”]该应用程序从未实际“接触”服务器以确保服务器已打开、连接或响应

可达性的实际作用大致如下:

-(BOOL)isWifiRouterConnected
{
    BOOL returnValue = NO;
    //test for a wifi connection
    Reachability *wifiReachability = [Reachability reachabilityForLocalWiFi];
    BOOL wifiReachable = [wifiReachability isReachableViaWiFi];

    //test for connection to google
    if( wifiReachable )
    {
        returnValue = [Reachability reachabilityWithHostname:@"google.com"];
    }
    return returnValue;
 }
  • 使用当前DNS配置查找IP地址。如果无法解析DNS,则无法访问主机
  • 查看所有已知网络连接的当前状态。如果它们全部关闭,则无法访问主机
  • 对于每个网络适配器,确定目标IP是否位于本地子网上。如果是,则报告为可访问
  • 对于每个网络适配器,确定是否存在到目标IP的路由路径。通常,这只查看默认网关。如果存在到目标IP的路径,请将其报告为可访问
  • 如果所有操作都失败,则无法访问主机
  • 您遇到的问题是,如果您使用的是WiFi,但用户尚未同意条款和条件,这在星巴克很常见,但仍将报告可到达目的地


    测试网络连通性的唯一真正方法是下载一些东西。例如,我经常在服务器上看到专门用于此目的的乒乓功能和心跳文件。在这个庄园里,你不仅可以测试你的互联网,还可以测试服务器是否按预期运行

    谢谢你的回答。然而,我应该提到,我不希望我的可达性测试的结果受到连接到internet的影响。这就是我要寻找的:如果设备连接到LAN,返回1。如果设备未连接到LAN,则返回0。您应该使用YES/NO或TRUE/FALSE,而不是1/0。他说他只想检查LAN@Daij-Djan告诉我可以在设备上插入以太网电缆的位置。您需要代码,因此根据指南,您应该提供一个小型SSCCE。我不知道这一点,这听起来很有用:)你是如何在iOS上实现局域网的?这张海报听起来很混乱。@JohnRiselvato,我不认为他的字面意思是局域网(相对于WLAN),而是想在他的本地网络上测试连接。对我来说,你的答案是完美的+1.如果你看我的答案,你会发现“isReachableViaWiFi”呼叫将检查你是否连接到wifi网络。你的答案并不确定是否有工作的互联网连接,只有当他可以连接到局域网上的服务器(可能不存在)时。@Jonah.at.GoDaddy OP明确表示他不想检查网络“internet”,即“intranet”。即便如此,您的解决方案仅适用于1个网络。如果他将手机带到朋友家并想在那里使用他的应用程序,会发生什么情况?很可能他的朋友不会有主机名为“internalserver.example.com”的系统。