Swift3でURLSessionでHTTPアクセスしてます。
以下のようなコードで書いているんですが、サーバがダウンしていた時に
IPも接続できないのですが、エラー処理になりません、
希望はタイムアウトを設定しているので10秒でタイムアウトしてエラー処理かと思っていたのですが、
XCodeで実iPhone機でログを取っているとログは「Could not connect to the server」と出ているのに全然エラー処理(以下の「self.netResponsejob(false)」)になりません。
Connectできなかった場合のエラー処理はどのように記載するのでしょうか?
すみませんが、ご教授ください。
Swift
1 let targetURL: String = "http://hogehoge.com" 2 let encodedURL = targetURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) 3 let url = URL(string: encodedURL!) 4 // 通信用のConfigを生成 5 let urlconfig = URLSessionConfiguration.default 6 urlconfig.timeoutIntervalForRequest = 10 7 urlconfig.timeoutIntervalForResource = 10 8 let session = URLSession(configuration: urlconfig, delegate: self as URLSessionDelegate, delegateQueue: nil) 9 // 通信開始 10 session.dataTask(with: url!) { data, response, error in 11 if error == nil { 12 if let data = data { 13 let resData = String(data: data, encoding: String.Encoding.utf8) 14 if ( (resData?.utf8.count)! > 100 ) { 15 DispatchQueue.main.async { 16 self.netSuccessjob() 17 } 18 } else { 19 DispatchQueue.main.async { 20 self.netResponsejob(false) 21 } 22 } 23 } else { 24 DispatchQueue.main.async { 25 self.netResponsejob(false) 26 } 27 } 28 } else { 29 DispatchQueue.main.async { 30 self.netResponsejob(false) 31 } 32 } 33 }.resume() 34 }
Log
1NSErrorFailingURLKey=http://192.168.8.99:999/r, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.}
self.netSuccessjob() が実行されているということでしょうか?ステータスコードはどうなってますか?
見落としていました。まだ解決しておりません。self.netSuccessjob()もタイムアウトも何も発生せず、ずっと応答が帰ってこない状況です。何か根本が間違っているかもしれませんがわかりません。バグか何かかと考えていました。何かわかりましたらご教授ください。よろしくお願いします。
処理の流れのことを聞いているのですが、エラー処理にならないということは、if ( (resData?.utf8.count)! > 100 ) { このif文の中に入って self.netSuccessjob() が実行されているということでしょうか?
すみません、亀レスです。もう一度確認しようと思っていましたが環境を戻すのが大変なので、レスします。いえ、何も処理されず戻ってこないように見えてます。
処理がどこにも戻ってこない気がします。タイムアウトもせずに。。。
ただ、他で同様の処理を書いてるところは正常にタイムアウトしていますので、なぜか原因がわからないですが、おかしなところに何かおかしな設定をしているのかもしれません。
この処理で正常に行く時(対向サーバがある時)は正常にself.netSuccessjob() が実行されています。もし、設定などでお気づきがありましたらご連絡をお願いします、
回答1件
あなたの回答
tips
プレビュー