⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customersftp.cs

📁 C#打造操作系统任务计划
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO; 
using System.Web.UI;
 

namespace MCDYService
{
	/// <summary>
	/// FTP 的摘要说明。
	/// </summary>
	public class FTP
	{
		private string strRemoteHost;
		private int strRemotePort;
		private string strRemotePath;
		private string strRemoteUser;
		private string strRemotePass;
		private Boolean bConnected;

		#region 内部变量
		/// <summary>
		/// 服务器返回的应答信息(包含应答码)
		/// </summary>
		private string strMsg;
		/// <summary>
		/// 服务器返回的应答信息(包含应答码)
		/// </summary>
		private string strReply;
		/// <summary>
		/// 服务器返回的应答码
		/// </summary>
		private int iReplyCode;
		/// <summary>
		/// 进行控制连接的socket
		/// </summary>
		private Socket socketControl;
		/// <summary>
		/// 传输模式
		/// </summary>
		private TransferType trType;
		/// <summary>
		/// 传输模式:二进制类型、ASCII类型
		/// </summary>
		public enum TransferType
		{
			/// <summary>
			/// Binary
			/// </summary>
			Binary,
			/// <summary>
			/// ASCII
			/// </summary>
			ASCII
		};
		/// <summary>
		/// 接收和发送数据的缓冲区
		/// </summary>
		private static int BLOCK_SIZE = 512;
		Byte[] buffer = new Byte[ BLOCK_SIZE];
		/// <summary>
		/// 编码方式
		/// </summary>
		Encoding ASCII = Encoding.Default;
		#endregion

		#region 内部函数

 

 


		#region 构造函数
		/// <summary>
		/// 缺省构造函数
		/// </summary>
		public FTP()
		{
			strRemoteHost  = "";
			strRemotePath  = "";
			strRemoteUser  = "";
			strRemotePass  = "";
			strRemotePort  = 21;
			bConnected     = false;
		}

		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="remoteHost"></param>
		/// <param name="remotePath"></param>
		/// <param name="remoteUser"></param>
		/// <param name="remotePass"></param>
		/// <param name="remotePort"></param>
		public FTP( string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort )
		{
			strRemoteHost  = remoteHost;
			strRemotePath  = remotePath;
			strRemoteUser  = remoteUser;
			strRemotePass  = remotePass;
			strRemotePort  = remotePort;
			Connect();
		}
		#endregion

		#region 登陆
		/// <summary>
		/// FTP服务器IP地址
		/// </summary>
  
		public string RemoteHost
		{
			get
			{
				return strRemoteHost;
			}
			set
			{
				strRemoteHost = value;
			}
		}
		/// <summary>
		/// FTP服务器端口
		/// </summary>
		public int RemotePort
		{
			get
			{
				return strRemotePort;
			}
			set
			{
				strRemotePort = value;
			}
		}
		/// <summary>
		/// 当前服务器目录
		/// </summary>
		public string RemotePath
		{
			get
			{
				return strRemotePath;
			}
			set
			{
				strRemotePath = value;
			}
		}
		/// <summary>
		/// 登录用户账号
		/// </summary>
		public string RemoteUser
		{
			set
			{
				strRemoteUser = value;
			}
		}
		/// <summary>
		/// 用户登录密码
		/// </summary>
		public string RemotePass
		{
			set
			{
				strRemotePass = value;
			}
		}

		/// <summary>
		/// 是否登录
		/// </summary>
		public bool Connected
		{
			get
			{
				return bConnected;
			}
		}
		#endregion

		#region 链接
		/// <summary>
		/// 建立连接 
		/// </summary>
		public void Connect()
		{
			socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
			IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
			// 链接
			try
			{
				socketControl.Connect(ep);
			}
			catch(Exception)
			{
				throw new IOException("不能连接远程服务器");
			}

			// 获取应答码
			ReadReply();
			if(iReplyCode != 220)
			{
				DisConnect();
				throw new IOException(strReply.Substring(4));
			}

			// 登陆
			SendCommand("USER "+strRemoteUser);
			if( !(iReplyCode == 331 || iReplyCode == 230) )
			{
				CloseSocketConnect();//关闭连接
				throw new IOException(strReply.Substring(4));
			}
			if( iReplyCode != 230 )
			{
				SendCommand("PASS "+strRemotePass);
				if( !(iReplyCode == 230 || iReplyCode == 202) )
				{
					CloseSocketConnect();//关闭连接
					throw new IOException(strReply.Substring(4));
				}
			}
			bConnected = true;

			// 切换到目录
			ChDir(strRemotePath);
		}


		/// <summary>
		/// 关闭连接
		/// </summary>
		public void DisConnect()
		{
			if( socketControl != null )
			{
				SendCommand("QUIT");
			}
			CloseSocketConnect();
		}

		#endregion

		#region 传输模式

		/// <summary>
		/// 设置传输模式
		/// </summary>
		/// <param name="ttType">传输模式</param>
		public void SetTransferType(TransferType ttType)
		{
			if(ttType == TransferType.Binary)
			{
				SendCommand("TYPE I");//binary类型传输
			}
			else
			{
				SendCommand("TYPE A");//ASCII类型传输
			}
			if (iReplyCode != 200)
			{
				throw new IOException(strReply.Substring(4));
			}
			else
			{
				trType = ttType;
			}
		}


		/// <summary>
		/// 获得传输模式
		/// </summary>
		/// <returns>传输模式</returns>
		public TransferType GetTransferType()
		{
			return trType;
		}

		#endregion

		#region 文件操作
		/// <summary>
		/// 获得文件列表
		/// </summary>
		/// <param name="strMask">文件名的匹配字符串</param>
		/// <returns></returns>
		public string[] Dir(string strMask)
		{
			// 建立链接
			if(!bConnected)
			{
				Connect();
			}

			//建立进行数据连接的socket
			Socket socketData = CreateDataSocket();

			//传送命令
			SendCommand("NLST " + strMask);

			//分析应答代码
			if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
			{
				throw new IOException(strReply.Substring(4));
			}

			//获得结果
			strMsg = "";
			while(true)
			{
				int iBytes = socketData.Receive(buffer, buffer.Length, 0);
				strMsg += ASCII.GetString(buffer, 0, iBytes);
				if(iBytes < buffer.Length)
				{
					break;
				}
			}
			char[] seperator = {'\n'};
			string[] strsFileList = strMsg.Split(seperator);
			socketData.Close();//数据socket关闭时也会有返回码
			if(iReplyCode != 226)
			{
				ReadReply();
				if(iReplyCode != 226)
				{
					throw new IOException(strReply.Substring(4));
				}
			}
			return strsFileList;
		}


		/// <summary>
		/// 获取文件大小
		/// </summary>
		/// <param name="strFileName">文件名</param>
		/// <returns>文件大小</returns>
		private long GetFileSize(string strFileName)
		{
			if(!bConnected)
			{
				Connect();
			}
			SendCommand("SIZE " + Path.GetFileName(strFileName));
			long lSize=0;
			if(iReplyCode == 213)
			{
				lSize = Int64.Parse(strReply.Substring(4));
			}
			else
			{
				throw new IOException(strReply.Substring(4));
			}
			return lSize;
		}


		/// <summary>
		/// 删除
		/// </summary>
		/// <param name="strFileName">待删除文件名</param>
		public void Delete(string strFileName)
		{
			if(!bConnected)
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -