局域网中的Swift Alamofire发现

时间:2018-09-29 01:45:38

标签: request timeout alamofire app-transport-security swift4.2

在我的局域网中,我在6台MAC计算机上运行以下Terminal命令,以托管一个文件夹discover.xml

python -m SimpleHTTPServer 17171

在安装了Alamofire的应用程序上,我运行以下代码以获取discover.xml的内容:

extension String {
    func url(file: String) -> URL {
        return URL(string: "http://\(self)/\(file)?rand=\(arc4random())")! // `rand` to make sure no cached content
    }
}

func discover(from ip: String, completion: @escaping () -> Void) {
     let url = ip.url(file: "discover.xml") // ip passed in: "192.168.1.15:17171" for ex

    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.timeoutInterval = 6.0 // !

    let manager = Alamofire.SessionManager.default
    manager.session.configuration.timeoutIntervalForRequest = 6.0
    manager.session.configuration.timeoutIntervalForResource = 6.0

    manager.request(request).responseData { (response) in
        switch response.result {
        case .success(let d):
            // do my stuff on `multiX`

        case .failure(let error):
            print("failed with IP: \(ip) => \(error)")
        }
    }        
} 

以下是我的发现方式:

private func discover(on subnet: String) { // subnet: 192.168.1
    let group = DispatchGroup()

    for i in 1..<256 {
        let ip = subnet + ".\(i):17171"

        group.enter()
        discover(from: ip) {
            group.leave()
        }
    }

    group.notify(queue: DispatchQueue.main) { [weak self] in
        guard let strongSelf = self else { return }

        print("all done: \(strongSelf.multiX.count)") // just can discover 2, or 3, or 4 !!
        strongSelf.tableView.reloadData()
    }
}   

为什么在大多数情况下,我无法从6台MAC计算机中获得6台discover.xml? (我只能得到2或3或4)。 我得到的结果不是持久的。假设我有6台运行python -m ...的MAC计算机,它们分别命名为:A,B,C,D,E,F。有时我只能得到:A,B,D,有时是C,F,...

请求托管discover.xml的其余计算机始终出现错误failed with IP: x.x.x.x:17171 => Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."(我确定那些丢失的计算机已成功获取IP)

使用上述方法发现整个子网是否可以? (即使用for循环迭代每个ip)。 6秒是合理的超时时间吗?

编辑:

我试图允许所有用户使用ATS,但情况并没有改善

ATS

实际上是什么使我无法在MAC计算机上请求discover.xml

谢谢

0 个答案:

没有答案