您的位置:首页 > 编程语言 > PHP开发

通过代理服务器,进行FTP操作

2020-01-15 09:26 274 查看
在网上搜了一下,对.Net的代理服务器和Ftp操作进行一些整理.
代理服务类NetProxy
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace WindowsApplication4
{
    public class NetProxy
     {
        string _ProxyAddress = String.Empty;

        public string ProxyAddress
         {
            get  { return _ProxyAddress; }
        }
        int _ProxyPort = 0;

        public int ProxyPort
         {
            get  { return _ProxyPort; }
        }

        public NetProxy(string proxyAddress, int proxyPort)
         {            
            _ProxyAddress = proxyAddress;            
            _ProxyPort = proxyPort;
        }

        /**//// <summary>
        /// 获得代理服务器
        /// </summary>
        /// <param name="userName">代理用户名</param>
        /// <param name="userKey">代理用户密码</param>
        /// <returns></returns>
        public WebProxy GetProxy(string userName, string userKey)
         {
            WebProxy _WP = new WebProxy(ProxyAddress, ProxyPort);
            //本地地址不使用代理服务器
            _WP.BypassProxyOnLocal = true;

            ICredentials credentials = new NetworkCredential(userName, userKey);
            _WP.Credentials = credentials;
            return _WP;            
        }

        /**//// <summary>
        /// 设置全局代理服务
        /// </summary>
        /// <param name="webProxy"></param>
        public void SetAllProxy(WebProxy webProxy)
         {
            WebRequest.DefaultWebProxy = webProxy;
        }

        public void Test(string userName, string userKey)
         {
            try
             {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.sina.com.cn"));
                request.Proxy = GetProxy(userName, userKey);
                request.UserAgent = "Mozilla/4.0";
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.AllowAutoRedirect = true;
                byte[] str = System.Text.Encoding.ASCII.GetBytes("username=admin");
                request.ContentLength = str.Length;
                Stream temps = request.GetRequestStream();
                return true;
            }
            catch (WebException ex)
             {
                return false;
            }           
          
        }
    }
}

Ftp操作类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;

namespace WindowsApplication4
{
    public class Ftp
     {
        string _ftpServerIP = String.Empty;

        public string FtpServerIP
         {
            get  { return _ftpServerIP; }
        }

        WebProxy _Proxy = null;

        public WebProxy Proxy
         {
            get  { return _Proxy; }            
        }

        string _ftpUserID = String.Empty;

        public string FtpUserID
         {
            get  { return _ftpUserID; }            
        }

        string _ftpPassword = String.Empty;

        public string FtpPassword
         {
            get  { return _ftpPassword; }            
        }


        public Ftp(string ftpServerIP, string ftpUserID, string ftpPassword, WebProxy webProxy)
         {
            _ftpServerIP = ftpServerIP;
            _ftpUserID = ftpUserID;
            _ftpPassword = ftpPassword;
            _Proxy = webProxy;
        }

        /**//// <summary>
        /// 创建FTP实体
        /// </summary>
        /// <param name="uri">InterNet的URI信息</param>
        /// <returns>FTP实体</returns>
        private FtpWebRequest CreatFtp(string uri)
         {
            FtpWebRequest _FtpRequest = null;
            _FtpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
            //指定文件传输类型
            _FtpRequest.UseBinary = true;
            _FtpRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
            // 默认为true,连接不会被关闭
            // 在一个命令之后被执行
            _FtpRequest.KeepAlive = false;
            //设置代理
            _FtpRequest.Proxy = this.Proxy;
            return _FtpRequest;
        }

        /**//// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="filename">文件全名称</param>
        private void Upload(string filename)
         {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + FtpServerIP + "/" + fileInf.Name;

            FtpWebRequest reqFTP = this.CreatFtp(uri);            

            // 指定执行什么命令
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // 上传文件时通知服务器文件的大小
            reqFTP.ContentLength = fileInf.Length;

            // 缓冲大小设置为2kb
            int buffLength = 2048;

            byte[] buff = new byte[buffLength];
            int contentLen;

            // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
            FileStream fs = fileInf.OpenRead();

            // 把上传的文件写入流
            Stream strm = reqFTP.GetRequestStream();

            // 每次读文件流的2kb
            contentLen = fs.Read(buff, 0, buffLength);

            // 流内容没有结束
            while (contentLen != 0)
             {
                // 把内容从file stream 写入 upload stream
                strm.Write(buff, 0, contentLen);

                contentLen = fs.Read(buff, 0, buffLength);
            }

            // 关闭两个流
            strm.Close();
            fs.Close();

        }

        /**//// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="filePath">路径</param>
        /// <param name="fileName">文件名称</param>
        private void Download(string filePath, string fileName)
         {            

            string uri = "ftp://" + FtpServerIP + "/" + fileName;

            FtpWebRequest reqFTP = this.CreatFtp(uri);

            FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);            

            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

            Stream ftpStream = response.GetResponseStream();

            long cl = response.ContentLength;

            int bufferSize = 2048;

            int readCount;

            byte[] buffer = new byte[bufferSize];

            readCount = ftpStream.Read(buffer, 0, bufferSize);

            while (readCount > 0)
             {
                outputStream.Write(buffer, 0, readCount);

                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }

            ftpStream.Close();

            outputStream.Close();

            response.Close();

        }
    }
}

转载于:https://www.cnblogs.com/chinaicm/archive/2008/07/14/1242387.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
dingqiao8604 发布了0 篇原创文章 · 获赞 0 · 访问量 81 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: