У меня есть приложение, которое подключает пользователей к серверу. Пользователи могут подключаться к хосту для связи, вставляя IP-адрес, и общаться с помощью NSStream. Нажатие кнопки подключения запускает соединение с хостом, и пользователь может получать и отправлять сообщения.
Я хочу дать пользователю возможность отключиться от сервера, чтобы не слушать нажатие кнопки отключения. Проблема в том, что я никогда не могу успешно закрыть поток.
Это моя текущая реализация:
// Create connection "Connect Button"
- (void)initNetworkCommunication:(UIViewController *)sender {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"123.456.789.123", 80, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
controller = sender;
}
// Stop connection "Disconnect Button"
- (void)stopNetworkConnection {
[inputStream close];
[outputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream release];
[outputStream release];
inputStream = nil;
outputStream = nil;
NSLog(@"Disconnect from stream");
}
Ход операций следующий:
- Пользователь вводит действительный IP-адрес;
- Пользователь нажимает «Кнопку подключения»;
- Все работает нормально, соединение установлено и пользователь может отправлять/получать сообщения;
- Пользователь нажимает «Кнопку отключения», и пользователь не получает сообщения;
- Пользователь нажимает «Кнопку подключения», но больше не может подключиться
Я пробовал это решение, но оно не сработало:
Ошибка закрытия и открытия NSStream
Заранее спасибо за помощь