\ DriveHQ Customer Support Forum \
읽음/답글 : 104321/7
  • DriveHQSupport_
  • (676게시물)
FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

많은 사용자들이 자신의 소프트웨어 프로젝트에서 DriveHQ의 FTP 서버에 연결하는 방법에 대해 문의해 왔습니다. 이 글에서는 먼저 FTP에 대한 일반적인 정보를 제공하고, 이어서 C# 소스 코드를 공유하고자 합니다.

DriveHQ는 FTP 서버 호스팅 서비스를 제공합니다. 일반 FTP 및 FTPS 프로토콜을 지원합니다. DriveHQ FTP 서비스의 주요 장점 중 하나는 광범위한 클라우드 IT 서비스와 완벽하게 통합되어 있다는 점입니다. 사용자는 웹 브라우저를 통해 FTP 파일에 액세스할 수 있습니다. 매핑된 드라이브(WebDAV) 또는 DriveHQ FileManager 클라이언트 소프트웨어를 사용할 수도 있습니다. 또한 웹 기반 그룹 관리 도구를 사용하여 FTP 사용자(하위 사용자)를 생성하고 관리할 수 있습니다.

일반 FTP 프로토콜은 데이터를 암호화하지 않고 전송하기 때문에 보안에 취약한 것으로 간주됩니다. 강력한 SSL 보안을 위해서는 FTPS(SSL/TLS를 사용한 FTP)를 사용할 수 있습니다. SSL 보안을 활성화하는 방법에는 두 가지가 있습니다:

절대적인: FTP 클라이언트는 특수한 FTPS 포트 번호(기본값은 990)에 직접 연결합니다.

명시적(FTPES): FTP 클라이언트는 일반 FTP 포트 번호 21에 연결한 다음 STARTTLS 명령을 실행하여 보안을 강화합니다.

DriveHQ의 FTP 서버는 FTPS와 FTPES를 모두 지원합니다. FileZilla, CuteFTP, WsFTP, SmartFTP, WinSCP, Fetch 등 대부분의 FTP 클라이언트 애플리케이션도 FTPS와 FTPES를 지원합니다.

SFTP라는 또 다른 보안 파일 전송 프로토콜이 있는데, 이는 종종 "보안 FTP"와 혼동되지만, 사실 "SSH 파일 전송 프로토콜"을 의미하며 완전히 다른 파일 전송 프로토콜입니다. 보안 관점에서 SSL/TLS와 SSH는 거의 동일합니다. 물론 SSL/TLS가 SSH보다 훨씬 널리 사용됩니다. DriveHQ의 FTP 서버는 SFTP를 지원하지 않는데, SFTP에 대한 필요성이 크지 않다고 판단했기 때문입니다.

능동 모드 및 수동 모드 FTP:

FTP 연결은 명령 채널과 데이터 채널, 두 개의 TCP 연결(채널)을 포함할 수 있습니다. 명령 채널은 FTP 명령을 전송하는 데 사용되고, 데이터 채널은 대용량 데이터를 전송하는 데 사용됩니다. 액티브 모드 FTP는 FTP 서버가 FTP 클라이언트에 다시 연결하여 데이터 연결을 설정해야 합니다. 이는 보안에 취약한 것으로 간주되어 많은 방화벽/라우터에서 차단됩니다. 패시브 모드 FTP는 FTP 클라이언트가 다른 포트 번호를 사용하여 FTP 서버에 연결해야 합니다. 이는 안전한 것으로 간주되며 차단되는 경우가 드뭅니다. DriveHQ의 FTP 서버는 액티브 FTP와 패시브 FTP를 모두 지원합니다. 그러나 라우터/방화벽 또는 보안 소프트웨어가 액티브 FTP를 차단하는 경우 작동하지 않을 수 있습니다. 흥미로운 점은 대부분의 최신 라우터가 액티브 FTP를 지원한다는 것입니다.

참고: 마이크로소프트의 명령줄 FTP 클라이언트는 패시브 FTP를 지원하지 않습니다. 거의 모든 다른 FTP 클라이언트 프로그램은 액티브 FTP와 패시브 FTP를 모두 지원합니다.

FTP 및 ProFTP

DriveHQ는 두 개의 FTP 사이트를 운영하고 있습니다. 하나는 모든 사용자가 접속할 수 있는 ftp.drivehq.com이고, 다른 하나는 유료 회원(유료 그룹 계정의 하위 사용자 포함)만 이용할 수 있는 proftp.drivehq.com입니다. proftp.drivehq.com은 유료 회원 전용이므로 익명 FTP를 지원하지 않습니다. DriveHQ의 FTP 서버 호스팅 서비스에 대한 자세한 내용은 다음 링크를 참조하십시오:

http://www.drivehq.com/servicemanual.aspx#_Toc265186728

 

FTP 클라이언트 소스 코드 예시

다음 C# 소스 코드는 어떠한 지원도 없이 있는 그대로 제공됩니다. 자유롭게 자신의 소프트웨어에 사용하거나 재배포할 수 있습니다. 샘플 코드는 저희 FTP 서버에 연결하고 LIST, GET, PUT과 같은 FTP 명령어를 실행하는 방법을 보여줍니다. 또한 패시브 FTP 및 SSL을 사용하도록 설정하는 방법도 확인할 수 있습니다.


시스템 사용;
System.Collections.Generic을 사용합니다.
System.Linq를 사용합니다.
System.Text를 사용합니다.
System.Threading.Tasks를 사용합니다.
System.Net을 사용합니다.
System.IO를 사용합니다.
System.Security.Cryptography.X509Certificates를 사용합니다.

/// <요약>
/// 저작권 © 2003-2016, Drive Headquarters, Inc. 
/// 
/// FTP 클라이언트 샘플 코드는 C#을 사용하여 DriveHQ의 FTP 서버에 연결하는 방법을 보여줍니다.
/// 이 코드는 자유롭게 사용하거나 무료로 재배포할 수 있습니다. 코드는 어떠한 제한 없이 있는 그대로 제공됩니다 
/// DriveHQ는 해당 코드 사용으로 인해 발생하는 어떠한 책임도 지지 않으며, 어떠한 지원이나 보증도 제공하지 않습니다.
///
네임스페이스 FTPClientSample
{
    수업 프로그램
    {
        static string ftpServer = "ftp.drivehq.com"; // 유료 계정이 있는 경우 proftp.drivehq.com을 사용할 수도 있습니다.
        static string username = "YOUR_USERNAME"; // DriveHQ 사용자 이름
        static string password = "YOUR_PASSWORD"; // DriveHQ 비밀번호
        정적 void Main(string[] args)
        {
            // FTP 서버의 폴더 목록을 보여주세요
            //목록("/"); 

            // FTP 서버에서 파일을 다운로드하세요
            //DownloadFile("ServerFileName.jpg", @"c:\temp\ClientFileName.jpg");

            // FTP 서버에 파일을 업로드하세요
            UploadFile(@"c:\temp\ClientFileName.jpg", "/temp/ServerFileName.jpg");
        }


        /// <요약>
        /// FTP 서버에 파일을 업로드하세요.
        ///
        /// 로컬 파일 경로
        /// FTP 서버의 파일 경로(예: /temp/filename)
        /// <반환값>
        public static bool UploadFile(string srcFilePath, string destFilePath = null)
        {
            (srcFilePath가 null이거나 공백인 경우)
                새로운 ArgumentNullException("소스 파일 경로.")를 던집니다.

            만약 (DestFilePath가 Null이거나 공백인 경우)
                destFilePath = Path.GetFileName(srcFilePath);

            Uri serverUri = GetUri(destFilePath);

            // serverUri는 ftp:// 스키마로 시작해야 합니다.
            만약 serverUri.Scheme이 Uri.UriSchemeFtp와 같지 않다면
                false를 반환합니다.

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.UploadFile);

            // 파일 내용을 바이트 배열로 읽어들입니다
            FileStream sourceStream = new FileStream(srcFilePath, FileMode.Open, FileAccess.Read);
            byte[] fileContent = new byte[sourceStream.Length];
            sourceStream.Read(fileContent, 0, fileContent.Length);
            sourceStream.Close();

            // 파일 내용을 FTP 서버로 전송합니다
            request.ContentLength = fileContent.Length;
            스트림 requestStream = request.GetRequestStream();
            requestStream.Write(fileContent, 0, fileContent.Length);
            requestStream.Close();

            FtpWebResponse 응답 = (FtpWebResponse)request.GetResponse();
            Console.WriteLine("응답 상태: {0} - {1}", response.StatusCode, response.StatusDescription);

            true를 반환합니다.
        }

        /// <요약>
        /// FTP 서버에서 srcFilePath 파일을 destFilePath로 다운로드합니다. destFilePath가 null인 경우 현재 폴더에 저장합니다.
        ///
        ///
        ///
        /// <반환값>
        public static bool DownloadFile(string srcFilePath, string destFilePath = null)
        {
            (srcFilePath가 null이거나 공백인 경우)
                새로운 ArgumentNullException("소스 파일 경로.")를 던집니다.

            만약 (DestFilePath가 Null이거나 공백인 경우)
                destFilePath = Path.GetFileName(srcFilePath);

            Uri serverUri = GetUri(srcFilePath);

            //// serverUri는 ftp:// 스키마로 시작해야 합니다.
            만약 serverUri.Scheme이 Uri.UriSchemeFtp와 같지 않다면
                false를 반환합니다.

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.DownloadFile);

            FtpWebResponse 응답 = (FtpWebResponse)request.GetResponse();
            스트림 responseStream = response.GetResponseStream();

            FileStream fileStream = new FileStream(destFilePath, FileMode.OpenOrCreate, FileAccess.Write);

            byte[] buffer = new byte[32 * 1024];

            참인 동안 {
                int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
                만약 (bytesRead가 0인 경우)
                    부서지다;

                fileStream.Write(buffer, 0, bytesRead);
            }
            fileStream.Close();

            Console.WriteLine("응답 상태: {0} - {1}", response.StatusCode, response.StatusDescription);

            true를 반환합니다.
        }

        /// <요약>
        /// FTP 폴더의 내용을 나열합니다
        ///
        ///
        /// <반환값>
        public static string List(string path)
        {

            Uri serverUri = GetUri(path);

            //// serverUri는 ftp:// 스키마로 시작해야 합니다.
            만약 serverUri.Scheme이 Uri.UriSchemeFtp와 같지 않다면
                반품 ""; 

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.ListDirectory);

            FtpWebResponse 응답 = (FtpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            문자열 결과 = sr.ReadToEnd();
            Console.WriteLine("응답 상태: {0} - {1}", response.StatusCode, response.StatusDescription + "\r\n" + result);

            결과를 반환합니다.
        }

        private static FtpWebRequest CreateFtpRequest(Uri serverUri, string method)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
            request.EnableSsl = true;
            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = true;
            request.Credentials = new NetworkCredential(username, password);
            request.Method = method;

            반환 요청;
        }

        private static Uri GetUri(string remoteFilePath)
        {
            Uri ftpServerUri = new Uri("ftp://" + ftpServer);
            새로운 Uri(ftpServerUri, remoteFilePath)를 반환합니다.
        }

    }
}
 

2016-05-10 오후 7:01:04

  • ajayreigns
  • (1게시물)
주제: PRO DriveHQ 계정에 연결하는 VB.NET 코드가 필요합니다
PRO DriveHQ 계정에 연결하는 VB.NET 코드가 필요합니다

PRO Drive 본사 계정에 연결하는 Visual Basic .NET 코드를 공유해 주세요


회신하다
2016-11-19 오전 12:25:49

  • arsene16pcs017
  • (1게시물)
주제: 제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기
제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

 안녕하세요! 웹 프로젝트를 디자인했는데, 제 파일들(텍스트, 비디오, 오디오 파일)을 클라우드에 공유해서 다른 사람들이 접근할 수 있도록 하는 모든 과정을 알려주실 수 있을까요? 드라이브HQ에 파일을 업로드하고 다운로드하는 방법과 코드를 알려주시면 감사하겠습니다


회신하다
2018-01-15 오후 10:32:28

  • DriveHQSupport_
  • (676게시물)
주제: 제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

사용자: arsene16pcs017  -  2018-01-15 오후 10:32:28

제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

 안녕하세요! 웹 프로젝트를 디자인했는데, 제 파일들(텍스트, 비디오, 오디오 파일)을 클라우드에 공유해서 다른 사람들이 접근할 수 있도록 하는 모든 과정을 알려주실 수 있을까요? 드라이브HQ에 파일을 업로드하고 다운로드하는 방법과 코드를 알려주시면 감사하겠습니다

제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

저희에게 연락해 주셔서 감사합니다. 

기본적인 공유/게시 관련 질문에 대한 답변은 서비스 설명서에서 찾으실 수 있습니다: https://www.drivehq.com/ServiceManual.aspx. 구체적인 문의 사항이 있으시면 이메일로 보내주세요 support@drivehq.com 저희는 최선을 다해 도와드리겠습니다. 

 

감사합니다,
DriveHQ 지원


 


회신하다
2018-01-16 오전 8:32:57

  • glorber
  • (1게시물)
주제: 제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기
제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

저는 Swift를 사용하여 iOS 애플리케이션을 개발하고 있습니다. 이 애플리케이션은 JSON 데이터 파일을 생성하는데, 이 파일을 DriveHQ에 업로드하고 다운로드하는 기능을 구현하고 싶습니다.

DriveHQ FTP 서버에 연결하는 Swift 코드 샘플을 공유해 주시겠습니까?

감사합니다.


회신하다
2018-09-22 오전 6:59:05

  • stleojohn
  • (1게시물)
주제: 제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기
제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

 이 코드를 실행하면 알 수 없는 예외 오류가 발생합니다. 도와주세요


회신하다
2019-11-26 오후 8:42:14

  • DriveHQ Support
  • (32게시물)
주제: 제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

사용자: stleojohn  -  2019-11-26 오후 8:42:14

제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

 이 코드를 실행하면 알 수 없는 예외 오류가 발생합니다. 도와주세요

제목: FTP 클라이언트 샘플 코드(C# 소스 코드): DriveHQ의 FTP 서버에 연결하기

코드 조각과 예외 메시지를 올려주세요. 또한 FileZilla에서 테스트하여 네트워크에서 FTP 연결을 차단하지 않는지 확인해 주세요.


회신하다
2019-11-26 오후 9:32:26

  • liveieee
  • (2게시물)
주제: 파이썬 FTP 클라이언트 프로그램
파이썬 FTP 클라이언트 프로그램

DriveHQ용 파이썬 버전을 공유해 주시겠습니까


회신하다
2019-12-31 오전 4:28:41

즐겨찾기에 추가하고 공유하세요
빠른 답변

Leading Cloud Surveillance service

Leading Enterprise Cloud IT Service Since 2003