투케이2K

589. (ios/swift5) [간단 소스] NWConnection FTP 서버 사용자 로그인 ID , PW 인증 및 파일 업로드 , 파일 다운로드 로직 설명 - 코드 설명 본문

IOS

589. (ios/swift5) [간단 소스] NWConnection FTP 서버 사용자 로그인 ID , PW 인증 및 파일 업로드 , 파일 다운로드 로직 설명 - 코드 설명

투케이2K 2024. 12. 1. 19:59

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

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

- 언어 : Swift


- 개발 툴 : Xcode


- 기술 구분 : NWConnection / FTP

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






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

    DispatchQueue.main.async { // [비동기 요청]
        
        // [FTP 접속을 위한 변수 선언]
        let server = "twok1234.dothome.co.kr"
        let port = 21 // [FTP 는 21 번 포트]
        let userName = "twok1234"
        let pw = "adminTwok12#$"
        
        // -----------------------------------------
        // [FTP 연결 요청 수행] : observableFtpConnect
        // -----------------------------------------
        // 1. 사용자 FPT 서버 활성 접속 상태 확인 : ftp://username:password@ftp.example.com:21 : NWConnection stateUpdateHandler
        // -----------------------------------------
        // 2. 실시간 메시지 수신 상태 확인 리시버 등록 : receiveData : NWConnection receive
        // -----------------------------------------
        // 3. USER 커맨드를 사용해 사용자 ID 인증 요청 : NWConnection send : receiveData 에서 응답 값 확인
        // -----------------------------------------
        // 4. PASS 커맨드를 사용해 사용자 PW 인증 요청 : NWConnection send : receiveData 에서 응답 값 확인
        // -----------------------------------------
        C_FTP_NWConnection_Client_Module().observableFtpConnect(server: server, port: UInt16(port), userName: userName, pw: pw){(connectResult) in
            
            S_Log._F_(description: "FTP 연결 확인 수행 (FTP 서버 활성 체크 및 로그인 ID , PW 인증 완료 상태)", data: ["\(connectResult)"])

            if connectResult == true {
            
                // -----------------------------------------
                // [FTP 파일 업로드 로직] : observableUploadFile
                // -----------------------------------------
                // 1. STOR 커맨드 사용해 파일 업로드 상태 전환 : remoteUrl : NWConnection send
                // -----------------------------------------
                // 2. 앱 내부 로컬에 저장 된 파일 send 보내기 수행 : App File Path : NWConnection send
                // -----------------------------------------
                /*
                DispatchQueue.main.asyncAfter(deadline: .now() + 5) { // [5초 시간 설정]
                
                    let fileUrl = C_App().get_File_Url(folderName: "LOG_FILE_FOLDER", fileName: "APP_CRASH_LOG_FILE.txt")
                    
                    S_Log._F_(description: "FTP 파일 송수신 URL 확인", data: ["\(String(describing: fileUrl))"])
                    
                    C_FTP_NWConnection_Client_Module().observableUploadFile(fileUrl: fileUrl?.description ?? "", remoteUrl:"/html/crash.txt"){(sendResult) in

                        S_Log._F_(description: "FTP 실시간 파일 전송 확인", data: ["\(sendResult)"])
                        
                    }
                    
                }
                // */
                
                
                
                // -----------------------------------------
                // [FTP 파일 다운로드 로직] : observableDownloadFile
                // -----------------------------------------
                // 1. TYPE 커맨드 사용해 바이너리 업로드 상태 전환 : NWConnection send : receiveData 에서 응답 값 확인
                // -----------------------------------------
                // 2. PASV 커맨드 사용해 패시브 모드 상태 전환 : NWConnection send : receiveData 에서 응답 값 확인
                // -----------------------------------------
                // 3. 성공적으로 패시브 모드 전환 시 새롭게 내려온 NEW 서버 주소 파싱 수행 : Entering Passive Mode (112,175,185,132,198,97)
                // -----------------------------------------
                // 4. NWConnection 새롭게 생성 후 ready 상태로 진입 수행 : NWConnection New Connection stateUpdateHandler
                // -----------------------------------------
                // 5. PASV 커맨드 사용해 로그인 한 커넥션 객체로 send 메시지 전송 (파일 내려 주세요. 요청) : NWConnection send : receiveData 에서 응답 값 확인
                // -----------------------------------------
                // 6. 신규 NWConnection 객체 reciveFile 리시버에서 파일 다운로드가 응답 되면 앱 내부에 파일 저장 수행 : File Save
                // -----------------------------------------
                /*
                DispatchQueue.main.asyncAfter(deadline: .now() + 5) { // [5초 시간 설정]
                    
                    C_FTP_NWConnection_Client_Module().observableDownloadFile(remoteUrl: "/html/crash.txt", localFileName:"crash.txt"){(sendResult) in

                        S_Log._F_(description: "FTP 실시간 파일 다운로드 확인", data: ["\(sendResult)"])

                    }
                    
                }
                // */
                
            }
            else {
            S_Log._F_(description: "FTP 연결 에러 메시지", data: ["\(C_FTP_NWConnection_Client_Module.FTP_CONNECT_LOG)"])
            }
            
        }
    }

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






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

https://developer.apple.com/documentation/coretelephony/cttelephonynetworkinfo

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

 

반응형
Comments