Мне нужна помощь в программировании сокета IOS. Я реализовал успешное соединение TCP Socket между IOS и Java-сервером, однако я обнаружил, что невозможно повторно подключить его после сбоя сокета (я отключу свою сеть и снова подключу его).Разъединение разъема в 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, чтобы увидеть, если я могу восстановить гнездо ... У вас см. любую проблему реализации? Вы рекомендуете использовать SmallSockets или CocoaAsyncSockets?
Благодарим вас заранее!
Какая ошибка возникает при повторном подключении? Кроме того, вы уверены, что сервер правильно прослушивает (например, вы можете подключиться к нему с netcat с вашего Mac, отключить и сразу же подключиться)? – abarnert
Я предполагаю, что вы используете ARC, верно? – parselmouth
Да, я использую ARC, поэтому в моем коде нет релизов ... однако я получаю все нормально на части сервера, поэтому я могу обмениваться пакетами между обеими частями ... проблема возникает, когда я пытаюсь восстановить соединение, когда я заставить отключить ... Я смог отправить снова, но не получать. Я добавлю дополнительную информацию о событиях сокетов, которые я получаю ... – Kasas