我正在开发一个应用程序,设备可以通过通用的wi-fi网络相互连接并进行交互,并且出于文件交换的目的,我使用GCDWebServer
。
当我使用常规的wi-fi网络或设备通过第三方主机连接到热点网络时,一切工作都很好。但是,当启动应用程序的设备之一实际上是一个热点主机时,我遇到一个奇怪的问题。
我有这个代码:
- (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
,该功能应该告诉地址,并且当Hotspot网络实际上是en0
时,此功能仅在bridge100
接口中查找地址。因此,问题是-是否存在使GCDWebServer与
bridge100
一起工作的“正常”方法?第二部分:
尽管
serverURL
为nil,但方法startWithPort
返回true
。因此,我认为服务器可能正在运行,只是无法告诉我其地址。因此,我通过自定义方法获得了设备的地址(如果您有兴趣,我可以在此处附加它,但我100%确信它提供了正确的地址),并尝试使用它来与Web服务器“对话”,但运气不好-服务器没有响应。因此,也许startWithPort
毕竟返回了错误的结果。非常有趣的观察-当我通过
primaryInterface
方法将bridge100
更改为GCDWebServerGetPrimaryIPAddress
时,它可以解决此问题。 GCDWebServer
显示正确的地址,并且由于我可以访问设备文件夹,因此它肯定正在运行。任何帮助,将不胜感激!
最佳答案
所以问题是-是否有使GCDWebServer与bridge100一起使用的“正常”方法?
否。您需要派生GCDWebServer并修补此功能。
尽管serverURL为nil,但方法startWithPort返回true。
如果此方法返回true,则服务器肯定正在运行。端口处于打开状态并且正在侦听(默认情况下绑定到所有接口)。问题是您需要弄清楚要使用什么IP从iPhone外部访问服务器。
关于ios - 通过热点网络的GCDWebServer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56464724/