目前在开发一款游戏平台类App
其中的通许是使用scket来写的,使用的GCDSocket完成后提交审核, 结果被拒. 一开始以为是短连接的原因,然后修改提交结果再次被拒,后来查找结果是socket长连接的原因.
scoket默认是使用IVP4的,而现在苹果强制使用IPV6,所以审核那边的测试环都是IPV6的,这样就导致了审核测试没有办法正常的使用功能.
所以在做scoket链接的时候我们要先检查当前网络环境,然后根据环境做ip的转换也不废话了直接上代码.
NSError *error = nil;
NSError *addresseError = nil;
NSArray *addresseArray = [GCDAsyncSocket lookupHost:self.ip port:self.port error:&addresseError];
if (addresseError) {
DDLogVerbose(@"转换失败");
}
NSString *ipv6Addr = @"";
for (NSData *data in addresseArray) {
if ([GCDAsyncSocket isIPv6Address:data]) {
ipv6Addr = [GCDAsyncSocket hostFromAddress:data];
}
}
if (ipv6Addr.length > 0) {
self.ip = ipv6Addr;
}
BOOL result = [self.clinetSocket connectToHost:self.ip onPort:self.port withTimeout:-1 error:&error];