我正在开发一个应用程序,设备可以通过通用的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/

10-09 19:01