我有一个应用程序需要连接到特定的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;
}
}
这里的讨论似乎相关,但他们似乎没有得出答案:http://lists.apple.com/archives/macnetworkprog/2009/Nov/msg00028.html – nflacco 2012-03-30 07:23:34
你找到了解决方案还是根源呢? – user4749 2013-01-10 14:10:26
我认为发生的事情是这样的:我用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