【发布时间】:2016-11-10 01:18:53
【问题描述】:
我有一部未激活的 iPhone,因此没有蜂窝数据,但它支持 WiFi。我可以访问 Safari、slack 等。没问题。我正在制作一个试图将 JSON 包发送到服务器并等待服务器响应的应用程序。但是我做的这个应用好像连互联网都没有接触到。
此代码将返回 true:(google.com 只是一个示例 url)
func isInternetAvailable() -> Bool
{
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
虽然此代码将返回 false:
func checkInternet(flag:Bool, completionHandler:@escaping (_ internet:Bool) -> Void)
{
UIApplication.shared.isNetworkActivityIndicatorVisible = true
let url = NSURL(string: "http://www.google.com/")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData
request.timeoutInterval = 10.0
NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue:OperationQueue.main, completionHandler:
{(response: URLResponse?, data: Data?, error: Error?) -> Void in
UIApplication.shared.isNetworkActivityIndicatorVisible = false
let rsp = response as! HTTPURLResponse?
self.OutputTextField.text = self.OutputTextField.text + ", \(rsp)"
completionHandler(rsp?.statusCode == 200)
} as! (URLResponse?, Data?, Error?) -> Void )
}
我尝试了很多方法来发送 JSON 包,但大多数只是让应用程序崩溃或没有响应。我输入了这段代码来演示应用程序在互联网连接方面所做的事情。我已更改 Info.plist 以允许任意加载并使用 WiFi。任何让它工作的东西都会有帮助。
【问题讨论】:
-
你使用的是http URL还是https URL?
-
我使用的是http,但是我已经在info.plist中添加了例外
标签: ios iphone connection swift3