IOSソケットプログラミングの助けが必要です。IOSとJavaサーバーの間に正常なTCPソケット接続を実装しましたが、ソケットに障害が発生した後は再接続できないことがわかりました(ネットワークを切断して再接続します)。
これは、ストリームを開くために使用するコードです。
- (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を使用することを考えています...実装上の問題がありますか?SmallSocketsまたはCocoaAsyncSocketsの使用をお勧めしますか?
前もって感謝します!!