Notice
Recent Posts
Recent Comments
Link
투케이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
// --------------------------------------------------------------------------------------
반응형
'IOS' 카테고리의 다른 글
Comments