我已将Reachability导入到我的应用程序中,并且我有几个方法问题。让我先解释一下我的应用程序和其他工具。
此应用程序通过3G与同一时间的两件事,ad-hoc网络和互联网进行通信。注意:ad-hoc网络未连接到Internet。这非常有效 - 它已经实现并且测试得非常好。
话虽如此,我想实现Reachability来检测两件事。
1)用户是否连接到wifi ad-hoc网络? (如果可能的话,更好的方法是检测它是否连接到前缀为WXYZ的wifi ad-hoc网络。例如,如果列出了两个网络,一个名为Linksys,另一个名为WXYZ-Testing_Platform,它知道是否与WXYZ连接)。
2)用户可以通过3G(或2G等)连接到互联网并访问我们的服务器吗?
提前致谢
编辑包括未来发现的答案:
对于1),我的代码如下所示:
.h
#import <SystemConfiguration/CaptiveNetwork.h> //for checking wifi network prefix
.m
- (BOOL) connectedToWifi
{
CFArrayRef myArray = CNCopySupportedInterfaces();
// Get the dictionary containing the captive network infomation
CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);
NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict;
NSString* ssid = [dict objectForKey:@"SSID"];
if ([ssid rangeOfString:@"WXYZ"].location == NSNotFound || ssid == NULL)
{
return false;
}
else
{
return true;
}
}
对于2),每当我连接到服务器时,我都会导入Reachability并使用此方法...注意:将http://www.google.com替换为服务器信息
-(void) checkIfCanReachServer
{
UIAlertView *errorView;
Reachability *r = [Reachability reachabilityWithHostName:@"http://www.google.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
if(internetStatus == NotReachable) {
errorView = [[UIAlertView alloc]
initWithTitle: @"Network Error"
message: @"Cannot connect to the server."
delegate: self
cancelButtonTitle: @"OK" otherButtonTitles: nil];
[errorView show];
}
}
答案 0 :(得分:7)
可达性仅让您知道设备是否可以成功发送数据包 out 。所以
1)你应该参考iPhone get SSID without private library。对于2)您将仅使用可访问性来检查互联网连接,然后您需要使用NSURLConnection
或其他网络库以确保您可以访问您的服务器。