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