zoukankan      html  css  js  c++  java
  • VB.Net实现Ftp下载的方法

    调用方式:

    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

  • 相关阅读:
    191. Number of 1 Bits
    190. Reverse Bits
    532. K-diff Pairs in an Array
    485. Max Consecutive Ones
    236. Lowest Common Ancestor of a Binary Tree
    235. Lowest Common Ancestor of a Binary Search Tree
    面试题68:树中两个节点的最低公共祖先
    Java—方法重写
    Java—继承
    代码块(Java)
  • 原文地址:https://www.cnblogs.com/NetPig/p/2096804.html
Copyright © 2011-2022 走看看