我是Swift的新手。我构建了一个在模拟器上工作正常的简单应用程序。我在我的设备上运行相同的程序(带有iOS 11.0.2的iPhone 6s)并且它无法连接到服务器。
收到这些错误:
2017-10-26 18:16:02.489134-0400 myproj[1451:206438] TIC TCP Conn Failed [1:0x1c0176800]: 1:61 Err(61)
2017-10-26 18:16:02.489771-0400 myproj[1451:206438] Task <0C30ADDC-4A0E-4815-A701-2EF0A7CF5F04>.<1> HTTP load failed (error code: -1004 [1:61])
2017-10-26 18:16:02.490293-0400 myproj[1451:206440] Task <0C30ADDC-4A0E-4815-A701-2EF0A7CF5F04>.<1> finished with error - code: -1004
请帮我理解这个错误。
编辑:
以下是调用服务器的代码:
func postRequest(postData: NSDictionary, postHeaders: NSDictionary, endPoint: String,
onComplete: @escaping ((NSDictionary)->Void), callbackParams: NSDictionary = NSMutableDictionary()) {
let url:URL = baseUrl.appendingPathComponent(endPoint)
let session = URLSession.shared
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
var paramString = ""
for (key, value) in postData{
paramString = paramString + (key as! String) + "=" + (value as! String) + "&"
}
request.allHTTPHeaderFields = postHeaders as? [String : String]
request.httpBody = paramString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest, completionHandler: {
(data, response, error) in
guard let _:Data = data, let _:URLResponse = response , error == nil else {
return}
let json: Any?
do {
json = try JSONSerialization.jsonObject(with: data!, options: [])
}
catch {
return
}
var serverResponse = json as? NSDictionary
DispatchQueue.main.async{
for (key, value) in serverResponse!{
callbackParams.setValue(value, forKey: key as! String)
}
onComplete(callbackParams)
}
})
task.resume()
}
编辑:
答案 0 :(得分:35)
错误-1004是URLError.cannotConnectToHost
。由于某种原因,它无法连接到服务器。
在评论中,您说网址为http://127.0.0.1
。那是localhost
,当前的机器。如果您在物理电话上使用该URL,它将在手机上查找网络服务器。 Lol。它适用于模拟器,因为模拟器 是您的计算机localhost
。
您需要一个iPhone可以解析为运行您的Web服务的计算机的URL。例如,找出在本地网络上运行Web服务的计算机的IP,确保您的iPhone在同一网络上的wifi上,然后在LAN上使用该唯一的IP号码(可能更像是192.168.0.x的)。
答案 1 :(得分:0)
当我发送/接收套接字消息时,我遇到了同样的问题!我使用Socket.io和Firebase进行推送,错误发生在node.js后端。 错误是mongoose版本已弃用 。每当iOS End出现此错误时,请求node.js后端团队查找红色崩溃日志。他们肯定会在前端找到导致此错误的问题。希望这会有所帮助!!
答案 2 :(得分:0)
在我的情况下,我不会更改本地主机IP地址。
Example : @"http://Localhost/Host name/index.pnp/apiname?";
最初我使用了上面的网址,所以我得到了同样的错误......
后来我改为Localhost改为190.177.0.22
Example : @"http://190.177.0.22/Host name/index.pnp/apiname?";
答案 3 :(得分:0)
如果您使用像ngrok这样的东西并且仍然无法正常工作,那么另一个极端情况是手机未连接到服务提供商网络或无线网络。
在我的情况下,我的主要电话正在工作,第二个服务电话没有。