我经由UDP连接到服务器,其是由通告的Bonjour不同的设备上。 当这两者此代码上运行的iOS设备,以及服务器,是我们的wifi网络上它,因为Bonjour服务解析到,我们的DHCP服务器的手了一个192.168.0.xxx地址工作得很好。 然而,当它被标榜蓝牙,有时服务解析为169.254.XXX.XXX(IPv4)的在这种情况下它工作得很好。 但有时它解析为FE80 :: XXXX:XXXX:XXXX:XXXX(IPv6)的在这种情况下,插座连接(我收到udpSocket:didConnectToAddress
回调),但是当我尝试发送数据立即关闭(我收到udpSocketDidClose:withError
立即回调在调用时发送)。
- (BOOL) setupConnection: (DNSSDService*) service
{
NSString *host = [service resolvedHost];
NSUInteger port = [service resolvedPort];
NSLog(@"in setupConnection: host %@ port %u",
host, port);
self.sock = [[GCDAsyncUdpSocket alloc]initWithDelegate:self
delegateQueue:dispatch_get_main_queue() ];
NSError *err = nil;
if (![self.sock connectToHost:host onPort:port error:&err]) {
NSLog(@"we goofed: %@", err);
return NO;
}
return YES;
}
我udpSocket:didConnectToAddress
方法调用的发送,我还有一个回调基本上都是在这一点上只是信息(NSLog的)。 这是NSError传递给udpSocketDidClose:withError
:
Error Domain=GCDAsyncUdpSocketErrorDomain Code=4 "Socket closed" UserInfo=0x2630c0 {NSLocalizedDescription=Socket closed}
不是有用较少。
在解决这个我想,使其使用IPv6代替IPv4的力工作...迫使IPv4的似乎只是脆弱的我。