Обработка ошибок в CFReadStream - Obj-C

Как мне обрабатывать ошибки в потоке? Если пользователь подключен не к той сети, я хочу справиться с этим. Спасибо!

Код:

- (void)initNetworkCommunication {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"IP HERE", 7777, &readStream, &writeStream);
_inputStream = (NSInputStream *)CFBridgingRelease(readStream);
_outputStream = (NSOutputStream *)CFBridgingRelease(writeStream);

[_inputStream setDelegate:self];
[_outputStream setDelegate:self];

[_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[_inputStream open];
[_outputStream open];
}

1 ответ

Решение

Я нашел решение, которое сработало в моем случае. Этот код распечатает BSSID текущей сети в консоли, и я просто проверяю, совпадает ли BSSID с идентификатором моей предпочтительной сети с помощью оператора if:

#import <SystemConfiguration/CaptiveNetwork.h>

//Checks which network the user is connected to.
CFArrayRef myArray = CNCopySupportedInterfaces();
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
NSLog(@"Connected at: %@", myDict);
NSDictionary *myDictionary = (__bridge_transfer NSDictionary*)myDict;
NSString * BSSID = [myDictionary objectForKey:@"BSSID"];
NSLog(@"BSSID is: %@", BSSID);

//Handling wrong/correct BSSID.
if (![BSSID isEqualToString:@"PREFERRED BSSID HERE"]) {
    //Handle error however you want.
}
else {
    //If correct BSSID, handle that here however you want.
}
}
Другие вопросы по тегам