C#编写的FTP上传简单工具类
- using System;
- using System.Net;
- using System.IO;
- using System.Text;
- using System.Net.Sockets;
- using System.Collections;
- using System.Collections.Generic;
- namespace WFDownLoad_ftp
- {
- /// <summary>
- /// FTP Client
- /// </summary>
- public class FTPClient
- {
- #region 构造函数
- /// <summary>
- /// 缺省构造函数
- /// </summary>
- public FTPClient()
- {
- 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 FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
- {
- strRemoteHost = remoteHost;
- strRemotePath = remotePath;
- strRemoteUser = remoteUser;
- strRemotePass = remotePass;
- strRemotePort = remotePort;
- Connect();
- }
- #endregion
- //public static void Main(string[] args)
- //{
- // FTPClient fc = new FTPClient("172.22.1.15", "/bcgz/x25/awstod", "zxt", "123456", 21);
- // //fc.ChDir("/bcgz/x25/awstod");
- // //Console.WriteLine(fc.RemotePath);
- // fc.Get("S5290900.A1053", @"F:\ttt", "");
- // // fc.getawsFile("S5290400.A1053");
- //}
- #region 登陆
- /// <summary>
- /// FTP服务器IP地址
- /// </summary>
- private string strRemoteHost;
- public string RemoteHost
- {
- get
- {
- return strRemoteHost;
- }
- set
- {
- strRemoteHost = value;
- }
- }
- /// <summary>
- /// FTP服务器端口
- /// </summary>
- private int strRemotePort;
- public int RemotePort
- {
- get
- {
- return strRemotePort;
- }
- set
- {
- strRemotePort = value;
- }
- }
- /// <summary>
- /// 当前服务器目录
- /// </summary>
- private string strRemotePath;
- public string RemotePath
- {
- get
- {
- return strRemotePath;
- }
- set
- {
- strRemotePath = value;
- }
- }
- /// <summary>
- /// 登录用户账号
- /// </summary>
- private string strRemoteUser;
- public string RemoteUser
- {
- set
- {
- strRemoteUser = value;
- }
- }
- /// <summary>
- /// 用户登录密码
- /// </summary>
- private string strRemotePass;
- public string RemotePass
- {
- set
- {
- strRemotePass = value;
- }
- }
- /// <summary>
- /// 是否登录
- /// </summary>
- private Boolean bConnected;
- 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("Couldnt connect to remote server");
- }
- // 获取应答码
- 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>
- /// 传输模式:二进制类型、ASCII类型
- /// </summary>
- public enum TransferType { Binary, ASCII };
- /// <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);
- //分析应答
来源: http://www.phpxs.com/code/1004537/