FTP क्लाइंट का नमूना कोड (C# स्रोत कोड): DriveHQ के FTP सर्वर से कनेक्ट करनाकई उपयोगकर्ताओं ने अपने सॉफ़्टवेयर प्रोजेक्ट में DriveHQ के FTP सर्वर से कनेक्ट करने के तरीके के बारे में पूछा है। इस संदेश में, हम पहले FTP के बारे में कुछ सामान्य जानकारी देंगे, उसके बाद कुछ C# सोर्स कोड प्रस्तुत करेंगे।
DriveHQ FTP सर्वर होस्टिंग सेवा प्रदान करता है। हम नियमित FTP और FTPS प्रोटोकॉल का समर्थन करते हैं। हमारी FTP सेवा का एक मुख्य लाभ यह है कि यह हमारी व्यापक क्लाउड IT सेवाओं के साथ सहज रूप से एकीकृत है। उपयोगकर्ता वेब ब्राउज़र का उपयोग करके अपनी FTP फ़ाइलों तक पहुँच सकते हैं। मैप्ड ड्राइव (WebDAV) या फिर DriveHQ FileManager क्लाइंट सॉफ़्टवेयर का उपयोग कर सकते हैं। वे हमारे वेब-आधारित ग्रुप एडमिन टूल का उपयोग करके FTP उपयोगकर्ता (उप-उपयोगकर्ता) बना और प्रबंधित भी कर सकते हैं।
सामान्य FTP प्रोटोकॉल को असुरक्षित माना जाता है क्योंकि यह डेटा को एन्क्रिप्शन के बिना प्रसारित करता है। मजबूत SSL सुरक्षा के लिए, आप FTPS (SSL/TLS पर FTP) का उपयोग कर सकते हैं। SSL सुरक्षा को लागू करने के दो तरीके हैं।:
अंतर्निहित: एफटीपी क्लाइंट सीधे एक विशेष एफटीपीएस पोर्ट नंबर से जुड़ता है (डिफ़ॉल्ट 990 है);
स्पष्ट (एफटीपीईएस): एफटीपी क्लाइंट नियमित एफटीपी पोर्ट नंबर 21 से कनेक्ट होता है, और फिर सुरक्षा को अपग्रेड करने के लिए STARTTLS कमांड जारी करता है।
DriveHQ का FTP सर्वर FTPS और FTPES दोनों को सपोर्ट करता है। अधिकांश FTP क्लाइंट एप्लिकेशन FTPS और FTPES को सपोर्ट करते हैं, जैसे FileZilla, CuteFTP, WsFTP, SmartFTP, WinSCP और Fetch आदि।
एक और सुरक्षित फ़ाइल स्थानांतरण प्रोटोकॉल है जिसे SFTP कहा जाता है, जिसे अक्सर "सुरक्षित FTP" समझ लिया जाता है; वास्तव में, इसका अर्थ "SSH फ़ाइल स्थानांतरण प्रोटोकॉल" है, जो एक पूरी तरह से अलग फ़ाइल स्थानांतरण प्रोटोकॉल है। सुरक्षा की दृष्टि से, SSL/TLS और SSH लगभग समान हैं। स्पष्ट रूप से SSL/TLS, SSH से अधिक लोकप्रिय है। DriveHQ का FTP सर्वर SFTP का समर्थन नहीं करता है क्योंकि हमें SFTP की कोई विशेष आवश्यकता नहीं दिखती है।
एक्टिव और पैसिव मोड एफटीपी:
एक FTP कनेक्शन में दो TCP कनेक्शन (चैनल) शामिल हो सकते हैं: कमांड चैनल और डेटा चैनल। कमांड चैनल का उपयोग FTP कमांड भेजने के लिए किया जाता है; डेटा चैनल का उपयोग बड़ी मात्रा में डेटा स्थानांतरित करने के लिए किया जाता है। एक्टिव मोड FTP में डेटा कनेक्शन स्थापित करने के लिए FTP सर्वर को FTP क्लाइंट से कनेक्ट करना आवश्यक होता है। इसे अक्सर असुरक्षित माना जाता है और कई फ़ायरवॉल/राउटर इसे ब्लॉक कर देते हैं। पैसिव मोड FTP में FTP क्लाइंट को FTP सर्वर से एक अलग पोर्ट नंबर पर कनेक्ट करना आवश्यक होता है। इसे सुरक्षित माना जाता है और इसे शायद ही कभी ब्लॉक किया जाता है। DriveHQ का FTP सर्वर एक्टिव और पैसिव दोनों FTP को सपोर्ट करता है। हालांकि, यदि आपका राउटर/फ़ायरवॉल या सुरक्षा सॉफ़्टवेयर एक्टिव FTP को ब्लॉक करता है, तो यह काम नहीं करेगा। यह ध्यान देने योग्य है कि अधिकांश नए राउटर एक्टिव FTP को सपोर्ट करते हैं।
कृपया ध्यान दें: माइक्रोसॉफ्ट का कमांड-लाइन एफटीपी क्लाइंट पैसिव एफटीपी को सपोर्ट नहीं करता है। लगभग सभी अन्य एफटीपी क्लाइंट प्रोग्राम एक्टिव और पैसिव एफटीपी दोनों को सपोर्ट करते हैं।
एफटीपी और प्रोएफटीपी
DriveHQ की दो FTP साइटें हैं, एक है ftp.drivehq.com, जो सभी उपयोगकर्ताओं के लिए उपलब्ध है; दूसरी है proftp.drivehq.com, जो केवल सशुल्क सदस्यों (सशुल्क समूह खाते के उप-उपयोगकर्ताओं सहित) के लिए उपलब्ध है। चूंकि proftp.drivehq.com केवल सशुल्क सदस्यों के लिए उपलब्ध है, इसलिए यह अनाम FTP का समर्थन नहीं करता है। हमारी FTP सर्वर होस्टिंग सेवा के बारे में अधिक जानकारी के लिए, कृपया देखें:
http://www.drivehq.com/servicemanual.aspx#_Toc265186728
नमूना एफटीपी क्लाइंट स्रोत कोड
निम्नलिखित C# सोर्स कोड बिना किसी सहायता के यथावत उपलब्ध कराया गया है। आप इसे अपने सॉफ़्टवेयर में उपयोग करने या पुनर्वितरित करने के लिए स्वतंत्र हैं। नमूना कोड हमारे FTP सर्वर से कनेक्ट करने और LIST, GET और PUT जैसे FTP कमांड निष्पादित करने का तरीका दर्शाता है; आप यह भी देख सकते हैं कि इसे पैसिव FTP और SSL का उपयोग करने के लिए कैसे सेट किया जाए।
सिस्टम का उपयोग करना;
सिस्टम.कलेक्शंस.जेनेरिक का उपयोग करना;
सिस्टम.लिनक का उपयोग करना;
सिस्टम.टेक्स्ट का उपयोग करना;
सिस्टम.थ्रेडिंग.टास्क का उपयोग करना;
सिस्टम.नेट का उपयोग करना;
System.IO का उपयोग करना;
System.Security.Cryptography.X509Certificates का उपयोग करना;
/// सारांश
/// कॉपीराइट (सी) 2003-2016, ड्राइव हेडक्वार्टर्स, इंक.
///
/// एफटीपी क्लाइंट का सैंपल कोड दिखाता है कि C# का उपयोग करके DriveHQ के एफटीपी सर्वर से कैसे कनेक्ट किया जाए।
/// आप इस कोड का उपयोग कर सकते हैं या इसे निःशुल्क पुनर्वितरित कर सकते हैं। यह कोड बिना किसी शुल्क के "जैसा है वैसा ही" प्रदान किया गया है।
/// किसी भी प्रकार की सहायता या वारंटी नहीं दी जाएगी। कोड के उपयोग से उत्पन्न किसी भी प्रकार की जिम्मेदारी ड्राइवएचक्यू की नहीं होगी।
///
नेमस्पेस FTPClientSample
{
क्लास प्रोग्राम
{
static string ftpServer = "ftp.drivehq.com"; // यदि आपके पास सशुल्क खाता है तो आप proftp.drivehq.com का भी उपयोग कर सकते हैं।
static string username = "YOUR_USERNAME"; // आपका DriveHQ उपयोगकर्ता नाम
static string password = "YOUR_PASSWORD"; // आपका DriveHQ पासवर्ड
स्थैतिक शून्य मुख्य (स्ट्रिंग[] तर्क)
{
// FTP सर्वर पर एक फ़ोल्डर सूचीबद्ध करें
//सूची("/");
// FTP सर्वर से एक फ़ाइल डाउनलोड करें
//DownloadFile("ServerFileName.jpg", @"c:\temp\ClientFileName.jpg");
// एफटीपी सर्वर पर एक फ़ाइल अपलोड करें
UploadFile(@"c:\temp\ClientFileName.jpg", "/temp/ServerFileName.jpg");
}
/// सारांश
/// एफटीपी सर्वर पर एक फाइल अपलोड करें।
///
/// FTP सर्वर पर पथ, जैसे /temp/filename
///
पब्लिक स्टैटिक बूल अपलोडफाइल (स्ट्रिंग srcFilePath, स्ट्रिंग destFilePath = null)
{
यदि (स्ट्रिंग.IsNullOrWhiteSpace(srcFilePath))
throw new ArgumentNullException("स्रोत फ़ाइल पथ.");
यदि (स्ट्रिंग.IsNullOrWhiteSpace(destFilePath))
destFilePath = Path.GetFileName(srcFilePath);
उरी सर्वरउरी = GetUri(destFilePath);
// serverUri की शुरुआत ftp:// स्कीम से होनी चाहिए।
यदि (serverUri.Scheme != Uri.UriSchemeFtp)
विवरण झूठा है;
FtpWebRequest अनुरोध = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.UploadFile);
// फ़ाइल की सामग्री को बाइट ऐरे में पढ़ें
FileStream sourceStream = new FileStream(srcFilePath, FileMode.Open, FileAccess.Read);
बाइट[] फ़ाइल सामग्री = नया बाइट[स्रोतस्ट्रीम.लंबाई];
sourceStream.Read(fileContent, 0, fileContent.Length);
sourceStream.Close();
// फ़ाइल की सामग्री को FTP सर्वर पर भेजें
अनुरोध.सामग्रीलंबाई = फ़ाइलसामग्रीलंबाई;
स्ट्रीम requestStream = request.GetRequestStream();
requestStream.Write(fileContent, 0, fileContent.Length);
requestStream.Close();
FtpWebResponse प्रतिक्रिया = (FtpWebResponse)अनुरोध.GetResponse();
Console.WriteLine("प्रतिक्रिया स्थिति: {0} - {1}", response.StatusCode, response.StatusDescription);
सत्य लौटाएँ;
}
/// सारांश
/// FTP सर्वर पर मौजूद srcFilePath को destFilePath में डाउनलोड करें। यदि यह null है, तो इसे वर्तमान फ़ोल्डर में सहेजें।
///
///
पब्लिक स्टैटिक बूल डाउनलोडफाइल (स्ट्रिंग srcFilePath, स्ट्रिंग destFilePath = null)
{
यदि (स्ट्रिंग.IsNullOrWhiteSpace(srcFilePath))
throw new ArgumentNullException("स्रोत फ़ाइल पथ.");
यदि (स्ट्रिंग.IsNullOrWhiteSpace(destFilePath))
destFilePath = Path.GetFileName(srcFilePath);
उरी सर्वरउरी = गेटउरी(srcFilePath);
//// serverUri की शुरुआत ftp:// स्कीम से होनी चाहिए।
यदि (serverUri.Scheme != Uri.UriSchemeFtp)
विवरण झूठा है;
FtpWebRequest अनुरोध = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.DownloadFile);
FtpWebResponse प्रतिक्रिया = (FtpWebResponse)अनुरोध.GetResponse();
स्ट्रीम रिस्पॉन्सस्ट्रीम = रिस्पॉन्स.गेटरिस्पॉन्सस्ट्रीम();
FileStream fileStream = new FileStream(destFilePath, FileMode.OpenOrCreate, FileAccess.Write);
बाइट[] बफर = नया बाइट[32 * 1024];
जबकि (सत्य) {
int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
यदि (bytesRead == 0)
तोड़ना;
फ़ाइलस्ट्रीम.राइट(बफर, 0, बाइट्सरीड);
}
फ़ाइलस्ट्रीम.बंद करें();
Console.WriteLine("प्रतिक्रिया स्थिति: {0} - {1}", response.StatusCode, response.StatusDescription);
सत्य लौटाएँ;
}
/// सारांश
/// किसी FTP फ़ोल्डर की सामग्री सूचीबद्ध करें
///
///
पब्लिक स्टैटिक स्ट्रिंग लिस्ट(स्ट्रिंग पाथ)
{
यूआरआई सर्वरयूआरआई = गेटयूआरआई (पथ);
//// serverUri की शुरुआत ftp:// स्कीम से होनी चाहिए।
यदि (serverUri.Scheme != Uri.UriSchemeFtp)
वापस करना "";
FtpWebRequest अनुरोध = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.ListDirectory);
FtpWebResponse प्रतिक्रिया = (FtpWebResponse)अनुरोध.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
स्ट्रिंग परिणाम = एसआर.रीडटूएंड();
Console.WriteLine("प्रतिक्रिया स्थिति: {0} - {1}", response.StatusCode, response.StatusDescription + "\r\n" + result);
परिणाम लौटाएँ;
}
निजी स्थैतिक FtpWebRequest CreateFtpRequest(Uri serverUri, स्ट्रिंग विधि)
{
FtpWebRequest अनुरोध = (FtpWebRequest)WebRequest.Create(serverUri);
अनुरोध.EnableSsl = true;
अनुरोध.UsePassive = true;
अनुरोध.UseBinary = true;
अनुरोध.कीपअलाइव = सही;
अनुरोध.क्रेडेंशियल = नया नेटवर्कक्रेडेंशियल (उपयोगकर्ता नाम, पासवर्ड);
अनुरोध.विधि = विधि;
वापसी अनुरोध;
}
निजी स्थैतिक यूआरआई गेटयूआरआई (स्ट्रिंग रिमोटफाइलपाथ)
{
Uri ftpServerUri = new Uri("ftp://" + ftpServer);
नया Uri लौटाएँ (ftpServerUri, remoteFilePath);
}
}
}