我正在开发一个应用程序,其中设备可以通过通用 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
应该告诉地址的函数,而这个函数只是en0
在 Hotspot 网络实际上是在接口中查找地址bridge100
。
所以问题是 - 是否有一种“正常”的方式可以让 GCDWebServer 工作bridge100
?
第二部分:
虽然serverURL
是 nil,但方法startWithPort
返回true
. 所以我想也许服务器正在运行,它只是不能告诉我它的地址。所以我用我的自定义方法得到了设备的地址(如果你有兴趣,我可以在这里附上它,但我 100% 确定它给出了正确的地址)并尝试使用它来与网络服务器“对话”,但没有运气 - 服务器没有响应。所以也许最终会startWithPort
返回一个错误的结果。
非常有趣的观察 - 当我改变primaryInterface
方法bridge100
时GCDWebServerGetPrimaryIPAddress
,它解决了这个问题。GCDWebServer
显示正确的地址并且它肯定正在运行,因为我可以访问设备文件夹。
任何帮助,将不胜感激!