在网上搜了一下,对.Net的代理服务器和Ftp操作进行一些整理.
代理服务类NetProxy
代理服务类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;
}
}
}
}
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>
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>