Advertisement
Guest User

Untitled

a guest
Sep 16th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.69 KB | None | 0 0
  1.     #region FTPClient
  2.     public class FTPClient
  3.     {
  4.         #region Objects
  5.         private string p_Host, p_Path, p_User, p_Password;
  6.         private int p_Port;
  7.         private Socket p_Socket;
  8.  
  9.         private string p_Reply;
  10.         private int p_ReplyCode;
  11.         private bool p_Connected;
  12.         #endregion
  13.  
  14.         #region Properties
  15.         public string Host
  16.         {
  17.             get { return p_Host; }
  18.         }
  19.  
  20.         public string Path
  21.         {
  22.             get { return p_Path; }
  23.         }
  24.  
  25.         public string User
  26.         {
  27.             get { return p_User; }
  28.         }
  29.  
  30.         public string Password
  31.         {
  32.             get { return p_Password; }
  33.         }
  34.  
  35.         public int Port
  36.         {
  37.             get { return p_Port; }
  38.         }
  39.  
  40.         public Socket Socket
  41.         {
  42.             get { return p_Socket; }
  43.         }
  44.  
  45.         public string Reply
  46.         {
  47.             get { return p_Reply; }
  48.         }
  49.  
  50.         public int ReplyCode
  51.         {
  52.             get { return p_ReplyCode; }
  53.         }
  54.  
  55.         public bool Connected
  56.         {
  57.             get { return p_Connected; }
  58.         }
  59.         #endregion
  60.  
  61.         #region Constructor/Destructor
  62.         public FTPClient(string host, string path, string user, string password, int port)
  63.         {
  64.             p_Host = host;
  65.             p_Path = path;
  66.             p_User = user;
  67.             p_Password = password;
  68.             p_Port = port;
  69.             p_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  70.  
  71.             p_Reply = string.Empty;
  72.             p_ReplyCode = 0;
  73.             p_Connected = false;
  74.         }
  75.  
  76.         ~FTPClient()
  77.         {
  78.             p_Connected = false;
  79.             p_ReplyCode = 0;
  80.             p_Reply = string.Empty;
  81.  
  82.             p_Socket = null;
  83.             p_Port = 0;
  84.             p_Password = string.Empty;
  85.             p_User = string.Empty;
  86.             p_Path = string.Empty;
  87.             p_Host = string.Empty;
  88.         }
  89.         #endregion
  90.  
  91.         #region Public Methods
  92.         public bool Connect()
  93.         {
  94.             IPEndPoint ep = new IPEndPoint(Dns.Resolve(p_Host).AddressList[0], p_Port);
  95.  
  96.             try
  97.             {
  98.                 p_Socket.Connect(ep);
  99.  
  100.                 ReadReply();
  101.                 if (p_ReplyCode != 220) Disconnect();
  102.                 else
  103.                 {
  104.                     SendCommand("USER " + p_User);
  105.                     if (p_ReplyCode != 331 || p_ReplyCode == 230) Cleanup();
  106.  
  107.                     if (p_ReplyCode != 230)
  108.                     {
  109.                         SendCommand("PASS " + p_Password);
  110.                         if (p_ReplyCode != 230 || p_ReplyCode == 202) Cleanup();
  111.                     }
  112.  
  113.                     ChangeDirectory(p_Path);
  114.  
  115.                     p_Connected = true;
  116.                 }
  117.             }
  118.             catch (SocketException)
  119.             {
  120.                 Cleanup();
  121.             }
  122.  
  123.             return p_Connected;
  124.         }
  125.  
  126.         public bool ChangeDirectory(string path)
  127.         {
  128.             bool result = true;
  129.  
  130.             if (p_Connected)
  131.             {
  132.                 p_Path = path;
  133.  
  134.                 SendCommand("CWD " + p_Path);
  135.                 if (p_ReplyCode != 250) result = false;
  136.             }
  137.             else result = false;
  138.  
  139.             return result;
  140.         }
  141.  
  142.         public void Disconnect()
  143.         {
  144.             if (p_Socket != null && p_Connected) SendCommand("QUIT");
  145.  
  146.             Cleanup();
  147.         }
  148.         #endregion
  149.  
  150.         #region Private Methods
  151.         private void Cleanup()
  152.         {
  153.             if (p_Socket != null) p_Socket.Close();
  154.  
  155.             p_Connected = false;
  156.         }
  157.  
  158.         private void ReadReply()
  159.         {
  160.             p_Reply = ReadLine();
  161.             p_ReplyCode = Int32.Parse(p_Reply.Substring(0, 3));
  162.         }
  163.  
  164.         private string ReadLine()
  165.         {
  166.             string message = string.Empty;
  167.  
  168.             while (true)
  169.             {
  170.                 p_Buffer.Clear(p_Buffer, 0, BLOCK_SIZE);
  171.                 p_Bytes = p_Socket.Receive(p_Buffer, p_Buffer.Length, 0);
  172.                 p_Message += Encoding.ASCII.GetString(p_Buffer, 0, p_Bytes);
  173.  
  174.                 if (p_Bytes < p_Buffer.Length) break;
  175.             }
  176.  
  177.             string[] s = message.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
  178.         }
  179.  
  180.         private void SendCommand(string command)
  181.         {
  182.             command += Environment.NewLine;
  183.  
  184.             byte[] data = Encoding.ASCII.GetBytes(command);
  185.  
  186.             p_Socket.Send(data, data.Length, 0);
  187.  
  188.             ReadReply();
  189.         }
  190.         #endregion
  191.     }
  192.     #endregion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement