【发布时间】:2019-10-21 05:08:20
【问题描述】:
我正在开发一个应用程序,设备可以通过普通的 wi-fi 网络相互连接和交互,并且为了文件交换我正在使用GCDWebServer。
当我使用常用的 wi-fi 网络或设备通过 3rd 方主机连接到热点网络时,一切正常。但是当启动应用程序的设备之一实际上是热点主机时,我遇到了一个奇怪的问题。
我有这个代码:
- (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,它应该告诉地址,当热点网络实际上是 bridge100 时,这个函数只在 en0 接口中查找地址。
所以问题是 - 有没有一种“正常”的方法可以让 GCDWebServer 与 bridge100 一起工作?
第二部分:
虽然serverURL 为nil,但方法startWithPort 返回true。所以我想也许服务器正在运行,它只是不能告诉我它的地址。所以我用我的自定义方法得到了设备的地址(如果你有兴趣,我可以在这里附上它,但我 100% 确定它给出了正确的地址)并尝试使用它来与网络服务器“对话”,但没有运气 - 服务器没有响应。所以也许startWithPort毕竟返回了一个错误的结果。
非常有趣的观察 - 当我在 GCDWebServerGetPrimaryIPAddress 方法中将 primaryInterface 更改为 bridge100 时,它解决了这个问题。 GCDWebServer 显示了正确的地址,它肯定正在运行,因为我可以访问设备文件夹。
任何帮助将不胜感激!
【问题讨论】:
标签: ios networking hotspot gcdwebserver