VB.Net实现Ftp下载的方法
2007-11-27 21:10
513 查看
调用方式:
DownloadFile("abc.rar","d:/abc.rar","Flase") ' 3个参数分别为远程ftp的文件名、保存到本地的完整路径、是否续传
功能函数:
Public Sub DownloadFile(ByVal Str_RemoteFileName As String, _
ByVal Str_LocalFileName As String, _
ByVal Bool_Resume As Boolean)
Dim Data_St As Stream
Dim output As FileStream
Dim LobSocket As Socket
Dim offset, npos As Long
If (Not Logined()) Then
Logined()
End If
SetBinaryMode(True)
If (Str_LocalFileName.Equals("")) Then
Str_LocalFileName = Str_RemoteFileName
End If
If (Not (File.Exists(Str_LocalFileName))) Then
Data_St = File.Create(Str_LocalFileName)
Data_St.Close()
End If
output = New FileStream(Str_LocalFileName, FileMode.Open)
LobSocket = CreateDataSocket()
offset = 0
If (Bool_Resume) Then
offset = output.Length
If (offset > 0) Then
SendCommand("REST " & offset)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 350) Then
offset = 0
End If
End If
If (offset > 0) Then
npos = output.Seek(offset, SeekOrigin.Begin)
End If
End If
SendCommand("RETR " & Str_RemoteFileName)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 150 Or Int_Reply = 125)) Then
MsgBox(Str_Reply.Substring(4))
End If
Do While (True)
Array.Clear(Byte_Buffer, 0, Byte_Buffer.Length)
Int_Bytes = LobSocket.Receive(Byte_Buffer, Byte_Buffer.Length, 0)
output.Write(Byte_Buffer, 0, Int_Bytes)
If (Int_Bytes <= 0) Then
Exit Do
End If
Loop
output.Close()
If (LobSocket.Connected) Then
LobSocket.Close()
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 226 Or Int_Reply = 250)) Then
MsgBox(Str_Reply.Substring(4))
End If
End Sub
Private Function CreateDataSocket() As Socket
Dim index1, index2, len As Int32
Dim partCount, i, port As Int32
Dim ipData, buf, ipAddress As String
Dim parts(6) As Int32
Dim ch As Char
Dim s As Socket
Dim ep As IPEndPoint
SendCommand("PASV")
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 227) Then
MsgBox(Str_Reply.Substring(4))
End If
index1 = Str_Reply.IndexOf("(")
index2 = Str_Reply.IndexOf(")")
ipData = Str_Reply.Substring(index1 + 1, index2 - index1 - 1)
len = ipData.Length
partCount = 0
buf = ""
For i = 0 To ((len - 1) And partCount <= 6)
ch = Char.Parse(ipData.Substring(i, 1))
If (Char.IsDigit(ch)) Then
buf += ch
ElseIf (ch <> ",") Then
MsgBox(Str_Reply)
End If
If ((ch = ",") Or (i + 1 = len)) Then
Try
parts(partCount) = Int32.Parse(buf)
partCount += 1
buf = ""
Catch ex As Exception
MsgBox(Str_Reply)
End Try
End If
Next
ipAddress = parts(0) & "." & parts(1) & "." & parts(2) & "." & parts(3)
port = parts(4) * (2 ^ 8)
port = port + parts(5)
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ep = New IPEndPoint(Dns.GetHostEntry(ipAddress).AddressList(0), port)
Try
s.Connect(ep)
Catch ex As Exception
MsgBox("无法连接到远程ftp服务器")
End Try
Return s
End Function
Public Sub SetBinaryMode(ByVal bMode As Boolean)
If (bMode) Then
SendCommand("TYPE I")
Else
SendCommand("TYPE A")
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 200) Then
MsgBox("111" & Str_Reply.Substring(4))
End If
End Sub
DownloadFile("abc.rar","d:/abc.rar","Flase") ' 3个参数分别为远程ftp的文件名、保存到本地的完整路径、是否续传
功能函数:
Public Sub DownloadFile(ByVal Str_RemoteFileName As String, _
ByVal Str_LocalFileName As String, _
ByVal Bool_Resume As Boolean)
Dim Data_St As Stream
Dim output As FileStream
Dim LobSocket As Socket
Dim offset, npos As Long
If (Not Logined()) Then
Logined()
End If
SetBinaryMode(True)
If (Str_LocalFileName.Equals("")) Then
Str_LocalFileName = Str_RemoteFileName
End If
If (Not (File.Exists(Str_LocalFileName))) Then
Data_St = File.Create(Str_LocalFileName)
Data_St.Close()
End If
output = New FileStream(Str_LocalFileName, FileMode.Open)
LobSocket = CreateDataSocket()
offset = 0
If (Bool_Resume) Then
offset = output.Length
If (offset > 0) Then
SendCommand("REST " & offset)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 350) Then
offset = 0
End If
End If
If (offset > 0) Then
npos = output.Seek(offset, SeekOrigin.Begin)
End If
End If
SendCommand("RETR " & Str_RemoteFileName)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 150 Or Int_Reply = 125)) Then
MsgBox(Str_Reply.Substring(4))
End If
Do While (True)
Array.Clear(Byte_Buffer, 0, Byte_Buffer.Length)
Int_Bytes = LobSocket.Receive(Byte_Buffer, Byte_Buffer.Length, 0)
output.Write(Byte_Buffer, 0, Int_Bytes)
If (Int_Bytes <= 0) Then
Exit Do
End If
Loop
output.Close()
If (LobSocket.Connected) Then
LobSocket.Close()
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 226 Or Int_Reply = 250)) Then
MsgBox(Str_Reply.Substring(4))
End If
End Sub
Private Function CreateDataSocket() As Socket
Dim index1, index2, len As Int32
Dim partCount, i, port As Int32
Dim ipData, buf, ipAddress As String
Dim parts(6) As Int32
Dim ch As Char
Dim s As Socket
Dim ep As IPEndPoint
SendCommand("PASV")
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 227) Then
MsgBox(Str_Reply.Substring(4))
End If
index1 = Str_Reply.IndexOf("(")
index2 = Str_Reply.IndexOf(")")
ipData = Str_Reply.Substring(index1 + 1, index2 - index1 - 1)
len = ipData.Length
partCount = 0
buf = ""
For i = 0 To ((len - 1) And partCount <= 6)
ch = Char.Parse(ipData.Substring(i, 1))
If (Char.IsDigit(ch)) Then
buf += ch
ElseIf (ch <> ",") Then
MsgBox(Str_Reply)
End If
If ((ch = ",") Or (i + 1 = len)) Then
Try
parts(partCount) = Int32.Parse(buf)
partCount += 1
buf = ""
Catch ex As Exception
MsgBox(Str_Reply)
End Try
End If
Next
ipAddress = parts(0) & "." & parts(1) & "." & parts(2) & "." & parts(3)
port = parts(4) * (2 ^ 8)
port = port + parts(5)
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ep = New IPEndPoint(Dns.GetHostEntry(ipAddress).AddressList(0), port)
Try
s.Connect(ep)
Catch ex As Exception
MsgBox("无法连接到远程ftp服务器")
End Try
Return s
End Function
Public Sub SetBinaryMode(ByVal bMode As Boolean)
If (bMode) Then
SendCommand("TYPE I")
Else
SendCommand("TYPE A")
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 200) Then
MsgBox("111" & Str_Reply.Substring(4))
End If
End Sub
相关文章推荐
- VB.Net实现Ftp下载的方法
- VB.NET中使用FTP下载文件的两种方法
- VB.Net实现Ftp上传的方法
- VB.NET中使用FTP下载文件的两种方法。
- VB.Net实现登陆Ftp的方法[乐博网原创]
- VB.NET中使用FTP下载文件的两种方法。
- VB.NET中使用FTP下载文件的两种方法
- VB.NET中使用FTP下载文件的两种方法
- asp.net生成Excel并导出下载的实现方法
- VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法
- qt5集成libcurl实现tftp和ftp的方法之四:实现ftp文件上传和下载
- asp.net中下载文件的实现方法
- asp.net生成Excel并导出下载五种实现方法
- 用vb实现ftp的上传下载
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(异步上传,下载等)实现汇总2
- [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能
- asp.net C#实现下载文件的六种方法实例
- [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能
- VB.Net实现打印机纸张类型自动更换的方法
- 利用org.apache.commons.net.ftp实现ftp下载,解决中文文件名乱码问题