투케이2K

571. (ios/swift5) [간단 소스] NWConnection 사용해 TCP IP 소켓 통신 연결 후 stateUpdateHandler 연결 상태 확인 방법 본문

IOS

571. (ios/swift5) [간단 소스] NWConnection 사용해 TCP IP 소켓 통신 연결 후 stateUpdateHandler 연결 상태 확인 방법

투케이2K 2024. 11. 25. 20:03

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift


- 개발 툴 : Xcode


- NWConnection 설명 :

  >> NWConnection 는 로컬 엔드포인트와 원격 엔드포인트 간의 양방향 데이터 연결 (TCP , UDP) 을 수행할 수 있습니다

  >> NWConnection 를 사용하기 위해서는 import Network 패키지 호출 정의가 필요합니다

  >> NWParameters 설정 가능 옵션 : 

   - tls
   - tcp
   - dtls
   - udp
   - quic
   - quicDatagram

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------


    // -------------------------------------------
    // MARK: - [전역 변수 선언]
    // -------------------------------------------
    private static let ACTIVITY_NAME = "C_TcpIp_Client_Socket_Module"
    
    let CONNECT_TIME_OUT = 20.0 // [연결 타임 아웃 시간]
    
    lazy var tcpOptions: NWProtocolTCP.Options = {
        let options = NWProtocolTCP.Options()
        options.noDelay = true // [딜레이 비활성]
        options.connectionTimeout = Int(self.CONNECT_TIME_OUT) // [connection timed out]
        return options
    }()

    lazy var parames: NWParameters = {
        let parames = NWParameters(tls: nil, tcp: self.tcpOptions)
        if let isOption = parames.defaultProtocolStack.internetProtocol as? NWProtocolIP.Options {
            isOption.version = .v4 // [ipv4 방식 : 192.168.1.1]
        }
        parames.preferNoProxies = true
        return parames
    }()
    
    var connection: NWConnection? = nil // [소켓 통신 수행 객체]


    // -------------------------------------------
    // MARK: - [NWConnection 객체 생성 수행]
    // -------------------------------------------
    self.connection = NWConnection(host: NWEndpoint.Host(ip), port: NWEndpoint.Port("\(port)")!, using: self.parames) // [지정한 파라미터로 설정]


    // -------------------------------------------
    // MARK: - [stateUpdateHandler 연결 상태 확인 수행]
    // -------------------------------------------
    self.connection?.stateUpdateHandler = { state in
        switch state {
        case .ready:
            S_Log._D_(description: "소켓 생성 및 연결 성공", data: [
                "M_LOG :: [Success] : Connection Ready State"
            ])
            
            // MARK: [실시간 소켓 메시지 수신 상태 확인 핸들러 등록]
            
        case .failed(let error):
            S_Log._D_(description: "소켓 생성 및 연결 실패", data: [
                "M_LOG :: [Fail] : Connection Fail State",
                "Description :: \(error)"
            ])
            
        case .cancelled:
            C_TcpIp_Client_Socket_Module.SOCKET_CONNECT_LOG = "[Cancel] : Connection Cancel State"
            
            S_Log._D_(description: "소켓 생성 및 연결 실패", data: [
                "M_LOG :: [Cancel] : Connection Cancel State"
            ])
            
        default:
            break
        }
    }

    
    // [연결 시작]
    self.connection?.start(queue: .global())


// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://developer.apple.com/documentation/network/nwconnection

// --------------------------------------------------------------------------------------

 

반응형
Comments