iOS 即时通讯Socket IPV6 被拒

542 阅读1分钟

目前在开发一款游戏平台类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];