IOS 소켓 프로그래밍에 도움이 필요합니다. 나는 IOS와 자바 서버 사이의 성공적인 TCP 소켓 연결을 구현했다. 그러나 나는 소켓이 실패한 후에 다시 연결하는 것이 불가능하다는 것을 발견했다. (나는 나의 네트워크 연결을 끊고 다시 연결한다.)IOS에서 소켓 단절
나는 스트림을 여는 데 사용하는 코드입니다:
- (void)initCommunication{
@try {
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"XXX.XXX.XXX.XXX", 4454, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
//Asignamos los delegates
inputStream.delegate = self;
outputStream.delegate = self;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
connected = true;
}
}
@catch (NSException *exception) {
connected = false;
NSLog(@"Error connecting socket: %@", exception.reason);
[self checkConnection];
}
}
가 그리고 내가 NSStreamEventErrorOccurred 또는 NSStreamEventEndEncountered를받을 때 내가 연결을 닫고 다시 재 연결을 시도합니다.
나는 그것을 닫습니다
-(void) close{
[inputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream close];
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream setDelegate:nil];
inputStream = nil;
[outputStream setDelegate:nil];
outputStream = nil;
connected = false;
}
문제 소켓을 수행 ... 내가 소켓을 다시 연결할 수 있는지 확인하기 위해 SmallSockets 또는 CocoaAsyncSockets를 사용하여 생각하고 ... 다시 다시 연결되지 않는 것입니다 구현 문제가 있습니까? SmallSocket 또는 CocoaAsyncSockets를 사용 하시길 권장합니까 ??
미리 감사드립니다.
다시 연결하면 어떤 오류가 발생합니까? 또한 서버가 제대로 듣고 있는지 확인하십시오 (예 : Mac에서 netcat으로 연결하고 연결을 끊은 다음 바로 다시 연결 할 수 있습니까?). – abarnert
ARC를 사용하고있는 것 같습니다. – parselmouth
예 ARC를 사용하고 있습니다. 그 이유는 내 코드에 릴리스가 없기 때문입니다 ... 그러나 서버 부분에서 모두 정상적으로 수신되므로 두 부분간에 패킷을 교환 할 수 있습니다. 문제가 발생하면 다시 연결할 때 문제가 발생합니다. 연결 해제를 강제로 ... 나는 다시 보낼 수는 있지만받을 수는 없었다. 내가받은 소켓 이벤트에 대한 더 많은 정보를 넣을 것입니다 ... – Kasas