Notice
Recent Posts
Recent Comments
Link
투케이2K
125. (TWOK/LOGIC) [Ios] NWConnection 사용해 TCP IP 소켓 연결 및 receive 실시간 메시지 수신 상태 확인 , 재귀 호출 로직 본문
투케이2K 로직정리
125. (TWOK/LOGIC) [Ios] NWConnection 사용해 TCP IP 소켓 연결 및 receive 실시간 메시지 수신 상태 확인 , 재귀 호출 로직
투케이2K 2024. 11. 27. 19:19[로직 정리]
정리 로직 : Ios / 아이폰
상태 : [Ios] NWConnection 사용해 TCP IP 소켓 연결 및 receive 실시간 메시지 수신 상태 확인 , 재귀 호출 로직
[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
- TCP IP 소켓 통신을 수행하기 위한 IP , PORT 정보 확인 필요
- 사전) 위치 권한 설정 필요
- NWConnection 설명 :
>> NWConnection 는 로컬 엔드포인트와 원격 엔드포인트 간의 양방향 데이터 연결 (TCP , UDP) 을 수행할 수 있습니다
>> NWConnection 를 사용하기 위해서는 import Network 패키지 호출 정의가 필요합니다
>> NWParameters 설정 가능 옵션 :
- tls
- tcp
- dtls
- udp
- quic
- quicDatagram
>> 참고 사이트 : https://developer.apple.com/documentation/network/nwconnection
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
1. 애플리케이션 실행 및 TCP IP 소켓 통신을 수행할 수 있는 화면 진입
2. 소켓 통신 화면에서 특정 IP , PORT 정보를 사용해 NWConnection TCP IP 소켓 통신 연결 수행 및 연결 상태 모니터링 실시
3. 정상적으로 소켓 연결이 완료 되어 stateUpdateHandler 핸들러 ready 상태가 되면 실시간 메시지 수신 함수 등록 수행
>> [실시간 소켓 연결 상태 감지 핸들러]
C_TcpIp_Client_Socket_Module.connection?.stateUpdateHandler = { state in
switch state {
case .ready:
S_Log._D_(description: "소켓 생성 및 연결 성공", data: [
"M_LOG :: [Success] : Connection Ready State",
"IP :: \(ip)",
"PORT :: \(port)"
])
// ---------------------------------------------
// MARK: [실시간 소켓 메시지 수신 상태 확인]
// ---------------------------------------------
self.receiveData()
case .failed(let error):
S_Log._D_(description: "소켓 생성 및 연결 실패", data: [
"M_LOG :: [Fail] : Connection Fail State",
"Description :: \(error)"
])
case .cancelled:
S_Log._D_(description: "소켓 생성 및 연결 실패", data: [ "M_LOG :: [Cancel] : Connection Cancel State" ])
default:
break
}
}
4. NWConnection receive 함수에서 실시간 응답 메시지가 수신 된 경우 데이터 파싱 및 로직 처리 후 다시 메시지를 감지하기 위해 재귀 호출 수행 및 응답 대기
>> [함수 소스 코드 첨부]
private func receiveData() {
if C_TcpIp_Client_Socket_Module.connection != nil {
C_TcpIp_Client_Socket_Module.connection?.receive(minimumIncompleteLength: 1, maximumLength: 1024, completion: { data, _, isComplete, error in
// ---------------------------------------------
// MARK: [실시간 메시지 수신 확인]
// ---------------------------------------------
if let data = data, !data.isEmpty {
let message = String(data: data, encoding: .utf8) ?? ""
S_Log._D_(description: "[Ing] ---- [소켓 실시간 메시지 수신 감지] ---- [Ing]", data: [
"message :: \(message)"
])
// ---------------------------------------------
// MARK: [로직 분기 처리]
// ---------------------------------------------
}
// ---------------------------------------------
// MARK: [계속해서 실시간 메시지 수신 처리]
// ---------------------------------------------
if isComplete {
S_Log._D_(description: "소켓 실시간 메시지 수신 감지 에러", data: [ "M_LOG :: [Error] : Connection closed by server" ])
// ---------------------------------------------
// MARK: [소켓 연결 종료 및 객체 초기화]
// ---------------------------------------------
C_TcpIp_Client_Socket_Module.connection?.cancel()
} else if let error = error {
S_Log._D_(description: "소켓 실시간 메시지 수신 감지 에러", data: [
"M_LOG :: [Error] : let error catch",
"Description :: \(error)"
])
// ---------------------------------------------
// MARK: [소켓 연결 종료 및 객체 초기화]
// ---------------------------------------------
C_TcpIp_Client_Socket_Module.connection?.cancel()
} else {
// ---------------------------------------------
// [계속해서 데이터 수신]
// ---------------------------------------------
self.receiveData()
}
})
}
else {
S_Log._D_(description: "소켓 실시간 메시지 수신 감지 에러 :: connection is null", data: nil)
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Ios - NWConnection 설명 및 TCP IP 소켓 통신 연결 및 데이터 전송 방법]
https://blog.naver.com/kkh0977/223670153413
[Ios - NWConnection 사용해 TCP IP 소켓 통신 NWProtocolTCP.Options 옵션 설정 방법]
https://blog.naver.com/kkh0977/223672535940
[Ios - NWConnection 사용해 TCP IP 소켓 통신 연결 후 stateUpdateHandler 연결 상태 확인 방법]
https://blog.naver.com/kkh0977/223672601987
// --------------------------------------------------------------------------------------
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments