[C# / Winform] FTP 통신 프로그램 만들기

이번 프로젝트는 C#과 Winform을 이용해서 FTP 통신 프로그램을 만드는 것입니다. FTP 프로그램은 이미 시중에 많이 나와 있습니다. 예를 들면 가장 많이 쓰이는 File Zilla가 있겠네요. 

저는 FTP 프로토콜이 어떤 방식으로 작동을 하고, 대표 프로그램인 File Zilla가 이를 어떻게 운영하는지 확인하기 위해 프로젝트를 시작했습니다. (시작하기 전에 확인해 주세요!)

 

배울 수 있는 기능에 대해 알아보겠습니다.

 

1. Window FTP 웹 서버 제작하기

File Zilla 프로그램을 보시면 아시겠지만 server와 client로 나눠져 있습니다. server에서 IP등록과 FTP ID,PW를 설정하고 client에서 인증을 하면 해당 서버와 연결이 되는 구조입니다. 저 역시도 server와 client를 따로 만들고 싶었지만 server를 더 많은 요구사항과 시간이 들 것 같아서 client만 제작을 하되, server는 window FTP 서버로 대체하기로 했습니다. window server 제작 과정을 보시면 FTP 연결을 위해서 서버에 어떤 것을 요구하는지 알 수 있습니다.

 

 

Window FTP 웹 서버 제작하기

🟧 왜 써야 하지?직접 FTP 서버를 만들기는 힘들뿐 아니라 시간이 많이 소요된다. 그래서 이미 시장에서는 FTP서버와 클라이언트를 제공하는 프로그램들이 많이 존재한다. 이런 프로그램을 사요

jin99.tistory.com

 

 

2. FTP Client 제작하기

사실상 제가 코드로 만든 것은 Client 부분 입니다. 여기서는 핵심 적인 부분만 코드로 보여줄 것이며, 나머지 코드는 제 깃허브에서 보시면 될 것 같습니다. 구현한 기능은 다음과 같습니다.

- 서버와 연결

- 파일 업로드 / 다운로드 / 삭제

- 모든 디렉토리 보여주기(TreeView, ListView)

- Drag & Drop 기능

 

 

[C# / winform] FTP Client 제작하기

FTP Client를 제작할 예정이다. 대표적인 FTP Client라고 한다면 File Zilla가 있다. 필자는 이 프로그램을 모티브로 해서 제작 할 것이다.   여기서 내가 설명할 기능은 다음과 같다.- 서버와 연결- 파

jin99.tistory.com

 

 

그 전에 FTP가 무엇인지 알아보자!

 


🟧 FTP 란?

File Transfer Protocol의 약자이며 TCP/IP를 이용해서 서버와 클라이언트 사이에 file을 전송할 수 있도록 만든 프로토콜이다. 기본적으로 FTP는 21번 포트와 20번 포트를 사용해서 연결과 데이터 전송을 한다. Active 모드와 Passive 모드가 있다.

이 둘의 가장 큰 차이점은 데이터 포트 요청을 Active인 경우는 클라이언트가 Passive인 경우는 서버가 요청한다.

 

1) Active Mode

① 클라이언트가 서버의 21번 포트로 접속 후 명령을 송수신 하기 위해 제어 채널을 생성한다. 이후 클라이언트가Data 전송할  5151포트(1024 이상의 포트)를 포함하여 서버에 알려준다.
② 서버는 이에 대해 Ack로 응답한다.
③ 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속 후 데이터 채널을 생성한다.
④ 마지막으로 클라이언트가 Ack로 응답한다.

 

서버에서 클라이언트로 요청을 하기 때문에 클라이언트 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 FTP 접속은 되지만 이후 데이터 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.

1) Passive Mode

① 클라이언트의 서버의 21번 포트로 접속 후 제어 채널을 생성한다. 이후 사용자가 명령어를 입력하면 클라이언트는 Passive Mode로 연결하기 위해 PASV명령어를 전송한다.
② 서버에서는 서버가 사용할 3267포트(1024 이상의 포트)를 알려준다.
③ 클라이언트는 서버가 알려준 포트번호로 접속을 시도하여 데이터 채널을 생성한다.
④ 서버는 Ack로 응답한 후 데이터를 송신한 후 데이터 채널 연결을 종료한다.

 

두 번째 data포트로서 active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용한다.

서버에서 포트번호를 알려주기 때문에,  해당 대역의 방화벽 포트를 열어 두어야 한다.

대부분의 웹브라우저는 ftp://를 이용하여 FTP에 접속할 때 수동모드만 지원한다.