Notice
Recent Posts
Recent Comments
Link
투케이2K
624. (ios/swift5) [유틸 파일] isPingInternetAvailable : URLSession 사용해 Ping 핑 체크 수행 실시 본문
IOS
624. (ios/swift5) [유틸 파일] isPingInternetAvailable : URLSession 사용해 Ping 핑 체크 수행 실시
투케이2K 2025. 1. 12. 10:29[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Swift5
- 개발 툴 : Xcode
- 기술 구분 : 유틸 파일 / URLSession / Http / Ping
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
var checkPingFlag = false
func isPingInternetAvailable() -> Bool {
/*
// -----------------------------------------
// [isPingInternetAvailable 메소드 설명]
// -----------------------------------------
1. 필요 import :
import Foundation
import UIKit
// -----------------------------------------
2. 호출 방법 :
DispatchQueue.main.async { // [비동기 요청]
if C_StateCheck().isPingInternetAvailable() == true {} else {}
}
// -----------------------------------------
*/
// [변수 값 초기화 설정]
self.checkPingFlag = false
// [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
let semaphore = DispatchSemaphore(value: 0)
// [Http 요청 Request 지정]
let urlData = "https://www.google.com"
let urlComponents = URLComponents(string: urlData)
var requestURL = URLRequest(url: (urlComponents?.url)!)
requestURL.httpMethod = "GET"
requestURL.addValue("application/x-www-form-urlencoded; charset=utf-8;", forHTTPHeaderField: "Content-Type")
requestURL.addValue("no-cache", forHTTPHeaderField: "Cache-Control")
// [http 요쳥을 위한 URLSessionDataTask 생성]
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 5.0 // [커넥션 타임 아웃 설정]
sessionConfig.timeoutIntervalForResource = 5.0 // [리소스 읽기 , 쓰기]
// [Http 요청 수행]
S_Log._D_(description: "GET 방식 PING 핑 [요청] 수행", data: ["URL :: " + String(describing: urlData)])
let session = URLSession(configuration: sessionConfig)
let dataTask = session.dataTask(with: requestURL, completionHandler: { (data, response, error) in
S_FileManager.appHttpLogSave(description: nil, request: nil, data: data, response: response as? HTTPURLResponse, error: error)
// [error가 존재하면 종료]
if error != nil {
S_Log._E_(description: "GET 방식 PING 핑 [결과] 실패", data: [
"URL :: " + String(describing: urlData),
"ERROR :: \(error?.localizedDescription ?? "")"
])
// [세마 포어 종료]
semaphore.signal()
}
else {
// [응답 코드 확인]
let responseCode = (response as? HTTPURLResponse)?.statusCode
S_Log._W_(description: "GET 방식 PING 핑 [결과] 성공", data: [
"URL :: " + String(describing: urlData),
"RESPONSE_CODE :: \(String(describing: responseCode))"
])
// [리턴 변수 값 변경]
self.checkPingFlag = true
// [세마 포어 종료]
semaphore.signal()
}
})
// [network 통신 실행]
dataTask.resume()
// [세마포어 확인 대기]
semaphore.wait()
// [로그 출력]
S_Log._D_(description: "Ping 핑 체크 방식을 통해 네트워크 사용 가능 상태 확인", data: [
"RETURN :: \(self.checkPingFlag)"
])
// [결과 리턴 수행 실시]
return self.getMobileLockFlag
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------
================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_StateCheck.swift :: isPingInternetAvailable() :: 1062
-------------------------------------------------
LOG :: NOW TIME :: 2025-01-12 10:20:08
-------------------------------------------------
LOG :: DESCRIPTION :: GET 방식 PING 핑 [요청] 수행
-------------------------------------------------
LOG :: URL :: https://www.google.com
================================================================
================================================================
LOG :: TYPE :: IMPORT :: 🟠
-------------------------------------------------
LOG :: CLASS PLACE :: C_StateCheck.swift :: isPingInternetAvailable() :: 1083
-------------------------------------------------
LOG :: NOW TIME :: 2025-01-12 10:20:08
-------------------------------------------------
LOG :: DESCRIPTION :: GET 방식 PING 핑 [결과] 성공
-------------------------------------------------
LOG :: URL :: https://www.google.com
-------------------------------------------------
LOG :: RESPONSE_CODE :: Optional(200)
================================================================
================================================================
LOG :: TYPE :: LOG :: 🟢
-------------------------------------------------
LOG :: CLASS PLACE :: C_StateCheck.swift :: isPingInternetAvailable() :: 1107
-------------------------------------------------
LOG :: NOW TIME :: 2025-01-12 10:20:08
-------------------------------------------------
LOG :: DESCRIPTION :: Ping 핑 체크 방식을 통해 네트워크 사용 가능 상태 확인
-------------------------------------------------
LOG :: RETURN :: true
================================================================
// --------------------------------------------------------------------------------------
반응형
'IOS' 카테고리의 다른 글
Comments