2012-03-29 37 views
4

我有一个应用程序需要连接到特定的AP。此AP未连接到互联网。当我将“设置”中的网络更改为新的AP时,我可以看到我几秒钟内收到了一个IP地址,但状态栏中的WiFi符号需要60-70秒才会显示。当我回到我的应用程序时,我无法连接到AP,直到出现此符号。一旦出现,连接完美地工作,但60秒等待用户很长时间。我正在使用NSStreamManager与AP通信。iphone慢识别wifi接入点的变化

我不明白为什么我无法连接只要设置显示一个IP地址。我知道苹果不允许在应用程序中控制网络设置。任何建议,将不胜感激。

更多信息:

在努力理解这个问题,我添加了一个计时器循环,只要我打开应用程序启动时,更改为新的wifi网络后。它报告可达性状态(通过苹果可达性类)并尝试获取SSID。如果这两个方法成功,那么它使用streamManager向AP发送JSON消息,如果不是,它会在一秒内再次调用自己。在第一个循环(不到1秒)内,插件可以到达并且SSID可读,但是它仍然需要流管理器完成60秒的平衡。我不认为问题出现在AP方面,因为Android版本的应用没有连接问题。

-(BOOL)didConnect{ 
    NSString *ssidString=[self.serverCommManager fetchSSIDInfo]; 
    NSString *ssidStart=[ssidString substringToIndex:5]; 
    NSLog(@"****:didConnect ssidStart=%@ ",ssidStart); 
    if([ssidStart isEqualToString:@"Ppppp"]){ 
     NSLog(@"****:didConnect isEqual=TRUE"); 
     self.streamManager = [[NSStreamManager alloc] initWithDelegate:self]; 
     [self.streamManager connectToHost:PlugHostName onPort:PlugPort withMessage: [JSONQuery queryIsPlug]]; 
     [self removeWaitView]; 
     return YES; 
    }else{ 

     NSLog(@"****:PlugSetupTVC didConnect isEqual=FALSE"); 
     [self startTimingWithInterval:1]; 
     return NO; 
    } 
} 
+0

这里的讨论似乎相关,但他们似乎没有得出答案:http://lists.apple.com/archives/macnetworkprog/2009/Nov/msg00028.html – nflacco 2012-03-30 07:23:34

+0

你找到了解决方案还是根源呢? – user4749 2013-01-10 14:10:26

+0

我认为发生的事情是这样的:我用AP地址连接到AP,而不是域名。 AP没有DNS。看起来,苹果设备试图查找域名,直到查找成功或超时,它才会连接。事实上,我能够从我的Macbook重现问题Telnet到AP,但可以立即从Windows机器连接。我们向AP添加了一个DNS,然后使用域名进行连接。即时连接! 另请参阅:http://stackoverflow.com/questions/9961791/nsstream-reverse-dns-lookup-error – mflac 2013-01-14 22:55:01

回答

0

因为iOS版(以下iOS7.0)会自动尝试平(有点)随机苹果地址,看看你的设备连接到互联网,所以这就是为什么你所描述的现象发生。

上面的iOS 7.0具有一项新功能,它允许您停止自动程序来ping地址。

有一个解决方案,因为iOS试图得到一个结果html文件,然后它会显示wifi符号,所以我设法修改DNS配置,并做出了一个HTML文件,其中包含的结果就像它希望的一样得到.... 但我不认为它会帮助你的问题,因为你正在写一个应用程序,所以你不能控制DNS,你能。