Я разрабатываю приложение, в котором устройства могут подключаться и взаимодействовать друг с другом через общую сеть Wi-Fi, и для обмена файлами я использую GCDWebServer
.
Все работает отлично, когдаЯ использую обычную сеть Wi-Fi или устройства подключены к сети точек доступа с хостом стороннего производителя.Но я сталкиваюсь со странной проблемой, когда одно из устройств с запущенным приложением на самом деле является хостом Hotspot.
У меня есть этот код:
- (void)startStreamHLSServer
{
dispatch_async(dispatch_get_main_queue(), ^{
if (!_webServer.isRunning)
{
_webServer = [GCDWebServer new];
[_webServer addGETHandlerForBasePath:@"/" directoryPath:[_fileManager videosURL].path indexFilename:nil cacheAge:3600 allowRangeRequests:YES];
[_webServer startWithPort:1000 bonjourName:nil];
NSLog(@"URL: %@", _webServer.serverURL.absoluteString);
}
});
}
Проблема в том, что serverURL равен nil
.Что на самом деле кажется логичным, потому что я проверил функцию GCDWebServerGetPrimaryIPAddress
, которая должна сообщать адрес, и эта функция ищет адреса только в интерфейсе en0
, когда сеть Hotspot на самом деле bridge100
.
Так что вопросis - есть ли "нормальный" способ заставить GCDWebServer работать с bridge100
?
ВТОРАЯ ЧАСТЬ:
Хотя serverURL
равен нулю, метод startWithPort
возвращает true
.Поэтому я подумал, что, возможно, сервер работает, он просто не может сказать мне свой адрес.Таким образом, я получил адрес устройства с помощью своего пользовательского метода (если вам интересно, я могу прикрепить его здесь, но я на 100% уверен, что он дает правильный адрес) и попытался использовать его, чтобы «говорить» с веб-сервером,но не повезло с этим - сервер не отвечает.Поэтому, возможно, startWithPort
в конце концов возвращает ложный результат.
Очень интересное наблюдение - когда я изменяю primaryInterface
на bridge100
в методе GCDWebServerGetPrimaryIPAddress
, это устраняет проблему.GCDWebServer
показывает правильный адрес, и он определенно работает, так как я могу иметь доступ к папке устройства.
Любая помощь будет признательна!