• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 分享用于操作FTP的客户端C#类

分享用于操作FTP的客户端C#类

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了ftp客户端中文版,ftp客户端,ftp客户端软件,ftp客户端下载,ftp客户端工具等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这是一个用于操作FTP的客户端C#类,类已经封装好了各种常用的Ftp操作方法,调用非常简单,你不需要关心ftp连接和操作的细节,只要调用这个类里的相关方法就可以了。

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Net.Sockets;
using System.Threading;
 
namespace DotNet.Utilities
{
  public class FTPClient
  {
    public static object obj = new object();
 
    #region 构造函数
    /// <summary>
    /// 缺省构造函数
    /// </summary>
    public FTPClient()
    {
      strRemoteHost = "";
      strRemotePath = "";
      strRemoteUser = "";
      strRemotePass = "";
      strRemotePort = 21;
      bConnected = false;
    }
 
    /// <summary>
    /// 构造函数
    /// </summary>
    public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
    {
      strRemoteHost = remoteHost;
      strRemotePath = remotePath;
      strRemoteUser = remoteUser;
      strRemotePass = remotePass;
      strRemotePort = remotePort;
      Connect();
    }
    #endregion
 
    #region 字段
    private int strRemotePort;
    private Boolean bConnected;
    private string strRemoteHost;
    private string strRemotePass;
    private string strRemoteUser;
    private string strRemotePath;
 
    /// <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>
    /// 接收和发送数据的缓冲区
    /// </summary>
    private static int BLOCK_SIZE = 512;
    /// <summary>
    /// 编码方式
    /// </summary>
    Encoding ASCII = Encoding.ASCII;
    /// <summary>
    /// 字节数组
    /// </summary>
    Byte[] buffer = new Byte[BLOCK_SIZE];
    #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()
    {
      lock (obj)
      {
        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("不能连接ftp服务器");
        }
      }
      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>
    public string[] Dir(string strMask)
    {
      if (!bConnected)
      {
        Connect();
      }
      Socket socketData = CreateDataSocket();
      SendCommand("NLST " + strMask);
      if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
      {
        throw new IOException(strReply.Substring(4));
      }
      strMsg = "";
      Thread.Sleep(2000);
      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;
    }
 
    public void newPutByGuid(string strFileName, string strGuid)
    {
      if (!bConnected)
      {
        Connect();
      }
      string str = strFileName.Substring(0, strFileName.LastIndexOf("\\"));
      string strTypeName = strFileName.Substring(strFileName.LastIndexOf("."));
      strGuid = str + "\\" + strGuid;
      Socket socketData = CreateDataSocket();
      SendCommand("STOR " + Path.GetFileName(strGuid));
      if (!(iReplyCode == 125 || iReplyCode == 150))
      {
        throw new IOException(strReply.Substring(4));
      }
      FileStream input = new FileStream(strGuid, FileMode.Open);
      input.Flush();
      int iBytes = 0;
      while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0)
      {
        socketData.Send(buffer, iBytes, 0);
      }
      input.Close();
      if



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享用于操作FTP的客户端C#类

相关文章

  • 2017-05-28c# list部分操作实现代码
  • 2017-05-28C# 排序算法之堆排序
  • 2017-05-28C# 设计模式系列教程-单例模式
  • 2017-05-28C#基于TimeSpan实现倒计时效果的方法
  • 2017-05-28DevExpress实现TreeList节点互斥的方法
  • 2017-05-28C#语言中条件与&&与条件或||的区别
  • 2017-05-28C#泛型集合Dictionary<K,V>的使用方法
  • 2017-05-28C#中调用SAPI实现语音识别的2种方法
  • 2017-05-28c#实现多线程局域网聊天系统
  • 2017-05-28简单对比C#程序中的单线程与多线程设计

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Windows系统中C#调用WinRAR来压缩和解压缩文件的方法
    • C#操作目录与文件的方法步骤
    • C#键盘鼠标钩子实例
    • C#中 城市线路图的纯算法以及附带求极权值
    • 深入DropDownList用法的一些学习总结分析
    • C# listview 点击列头排序的实例
    • 用序列化实现List<T> 实例的深复制(推荐)
    • c#详解datetime使用示例
    • c# 控件截图的简单实例
    • C#向线程中传递多个参数的解决方法(两种)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有