2014-04-11 3 views
0

내 IOS 응용 프로그램에서 나는 자바 서버에 사용자 이름과 암호를 보내는 로그인 방법이 있습니다. 문제는 서버가 오프라인 인 경우 응용 프로그램이 작동을 멈추는 것입니다. 그리고 서버가 다시 켜지면 응용 프로그램이 계속됩니다. 데이터를 보내기 전에 서버가 온라인 상태인지 확인하기 위해 애플리케이션에서 처리해야하는 예외 처리가 있습니까?서버가 연결되어 실행 중인지 확인하는 방법은 무엇입니까?

- (void)initNetworkCommunication { 

CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"XXXXX", 678, &readStream, 
            &writeStream); 
inputStream = (__bridge NSInputStream *)readStream; 
outputStream = (__bridge NSOutputStream *)writeStream; 
} 
-(void) connection{ 
[self initNetworkCommunication]; 
[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

[inputStream open]; 
[outputStream open]; 

    } 

////// thats how I'm sending the username and password 

NSString *username= [NSString stringWithFormat:@"%@\n",UsernameTextField.text]; 
NSString *password=[NSString stringWithFormat:@"%@\n",PasswordTextField.text]; 
NSLog(@"%@ %@",username,password); 

NSData *usernamedata = [[NSData alloc] initWithData:[username dataUsingEncoding:NSASCIIStringEncoding]]; 
NSData *passworddata = [[NSData alloc] initWithData:[password dataUsingEncoding:NSASCIIStringEncoding]]; 
[outputStream write:[usernamedata bytes] maxLength:[usernamedata length]]; 
[outputStream write:[passworddata bytes] maxLength:[passworddata length]]; 

답변

1

AFNetworking을 살펴 보시기 바랍니다. 블록을 사용한 비동기 연결을 포함하여 네트워킹과 관련된 모든 문제를 해결합니다.

네트워크 연결이 UI와 동일한 스레드에서 실행 중이며 스레드가 연결 시간 초과를 기다리고 있기 때문에 응용 프로그램이 정지되었다고 가정합니다.

AFNetworking 예제를 살펴 보는 것이 좋습니다. 이 코드는 도달 가능성에 필요한 코드입니다. AFNetworking :

if ([AFNetworkReachabilityManager sharedManager].reachable) 
{ 
    ... 
} 
관련 문제