博客> 关于socket重连的问题 涉及断网后登录的问题
关于socket重连的问题 涉及断网后登录的问题
2019-11-20 10:22 评论:0 阅读:1267 feng_zi
socket ISO 登录 断网重登陆

我在使用socket的时候涉及到socket的登录问题,这个查阅很多资料,现在谈一下个人的心得,最初是设计到断网后的网络请求的问题,需要不断请求,但需要时间间隔,没有时间间隔的话,容易导致app出现无法点击的问题,所以在网络未连接这样操作:

  • (void)connectToHost { //检测网络并连接 if ([self checkNetworkTypeWithHostName:HOST_myIP1] || [self checkNetworkTypeWithHostName:HOST_myIP2]) { NSError *error; [_socket connectToHost:[self getIPAddressByHostName:_currentHostIP] onPort:HOST_myPORT withTimeout:SocketTimeOut error:&error];//上线 // [_socket connectToHost:HOST_myIP1 onPort:HOST_myPORT withTimeout:SocketTimeOut error:&error];//测试 NSLog(@"哈哈哈哈哈哈哈哈"); if (error) { NSLog(@"连接错误:%@",error); [SVProgressHUD showErrorWithStatus:@"连接错误"]; } else { [_socket readDataToLength:sizeof(PackageHeader) withTimeout:SocketTimeOut tag:_currnetType]; // _isConnect = YES; } } else { NSLog(@"网络未连接"); [UIView animateWithDuration:3 delay:3 options:1 animations:^{ } completion:^(BOOL finished) { [self connectToHost]; }];

    } }

之后涉及到域名解析的问题,因为之前使用这个域名解析总是会出现各种问题,总之解释出现野指针,造成内存泄露。 //根据域名获取ip地址 -(NSString)getIPWithHostName:(const NSString)hostName { const char hostN= [hostName UTF8String]; struct hostent phot;

@try {
    phot = gethostbyname(hostN);

}
@catch (NSException *exception) {
    return nil;
}

struct in_addr ip_addr;
memcpy(&ip_addr, phot->h_addr_list[0], 4);
char ip[20] = {0};
inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));

NSString* strIPAddress = [NSString stringWithUTF8String:ip];
return strIPAddress;

} 现在把这个方法给改成这个一切OK

  • (NSString )getIPAddressByHostName:(NSString )hostName { struct hostent hostentry = NULL; hostentry = gethostbyname([hostName cStringUsingEncoding:NSASCIIStringEncoding]); if (hostentry == NULL) { NSLog(@"ERROR: ipAddressFromDomain: - gethostbyname error"); return nil; } char ipbuf = NULL; ipbuf = inet_ntoa(((struct in_addr )hostentry->h_addr_list[0])); if (ipbuf == NULL) { NSLog(@"ERROR: ipAddressFromDomain: - inet_ntoa error"); return nil; }

    NSString * address = [[NSString alloc] initWithCString:ipbuf encoding:NSASCIIStringEncoding];

    return address;

收藏
0
sina weixin mail 回到顶部