2

我没有从不同的网络访问。我只是想为混合应用程序提供文件。

当我使用以下代码连接到 wifi 网络时,只需运行基本服务器即可:

  let webServer = GCDWebServer()

    webServer.addDefaultHandlerForMethod("GET", requestClass: GCDWebServerRequest.self, processBlock: {request in
        return GCDWebServerDataResponse(HTML:"<html><body><p>Hello World</p></body></html>")

    })

    webServer.startWithPort(8080, bonjourName: "GCD Web Server")

    print("Visit \(webServer.serverURL) in your web browser")

日志:

在您的网络浏览器中访问http://192.168.1.132:8080/

当我放下 wifi 并启动应用程序和服务器时,我得到:

GCDWebServer 在端口 8080 上启动,可在 (null)

4

4 回答 4

3

无论连接类型如何(wifi 或 3g/4g),尝试启动服务器绑定到 localhost

do {
    try webServer.start(options: [
        "Port": 8080,
        "BindToLocalhost": true
        ])
} catch {
    // handle error
}

此外,如果Arbitrary Loads禁用(可能),请将“localhost”添加到NSExceptionDomainsinfo.plist

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
</dict>

在此处输入图像描述

于 2019-10-26T07:02:55.423 回答
1

serverUrl 为空,但良好的本地主机工作:

本地主机://

提供的 bonjour 服务 url 也可用

func webServerDidCompleteBonjourRegistration(server: GCDWebServer!) {

    if(self.serverURL == nil){
        self.serverURL=self.webServer!.bonjourServerURL
        print(self.serverURL)
        self.initWebView()
    }


}

这让事情在 wifi 关闭的情况下在本地运行。

于 2016-07-15T02:26:42.373 回答
1

这是预期的行为,尽管文档可能对此更清楚。

- (NSURL*)serverURL只是一种方便的方法,它返回附加服务器端口的设备的主 IP 地址。如果您的设备未连接到网络,它将返回nil. 参见GCDWebServerGetPrimaryIPAddress().

如果此方法返回 nil,则仅表示服务器未运行或似乎没有面向外部的 IP,即只能通过localhost.

于 2016-07-15T03:59:49.763 回答
0

Using the URL http://127.0.0.1:8080/ was the only option that worked for me when not on wifi.

于 2019-03-15T22:07:21.483 回答