zsbfree
技术的拉
c#上传下载ftp(支持断点续传)
这个ftpClient是从网上找来的,自己加了断点续传的方法
using
System;
using
System.Net;
using
System.IO;
using
System.Text;
using
System.Net.Sockets;
namespace
ftpGet
{
/**/
///
<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">
FTP服务器IP地址
</param>
///
<param name="remotePath">
当前服务器目录
</param>
///
<param name="remoteUser">
登录用户账号
</param>
///
<param name="remotePass">
登录用户密码
</param>
///
<param name="remotePort">
FTP服务器端口
</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
登陆字段、属性
#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(
"
Couldn't 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
;
//
切换到初始目录
if
(
!
string
.IsNullOrEmpty(strRemotePath))
{
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)
{
//