Avatar billede dollas Nybegynder
23. august 2004 - 22:05 Der er 37 kommentarer og
1 løsning

send en fil over netværk

Nogle der har en god ide til hvordan jeg for sendt en fil fra den ene computer til den anden?

JEg skal have sendt nogle filer fra mine clienter til min server. Min server fungere bla. som ftp, så hvis det kunne foregå via ftp ville det være max ok.

Problemet er så noget code til at kunne oprette en forbindelse til en ftp server, med mulighed for at sende og modtage filer og liste dem der er på serveren?
Avatar billede arne_v Ekspert
23. august 2004 - 22:07 #1
FTP er oplagt.

Hvis du har et upload script kunne du bruge HTTP og POST FILE.
Avatar billede dollas Nybegynder
23. august 2004 - 22:08 #2
Det skal jo køre via en app.?
Avatar billede arne_v Ekspert
23. august 2004 - 22:09 #3
Ja - du kan sagtens sende en HTTP POST fra et program.

5 linier kode.
Avatar billede arne_v Ekspert
23. august 2004 - 22:09 #4
Øh - jeg kan lige se at det var dig jeg snakkede FTP med her http://eksperten.dk/spm/525637 ??
Avatar billede dollas Nybegynder
23. august 2004 - 22:11 #5
Ja det var :)


Prøv at se hvad jeg har:

---
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
Imports Microsoft.VisualBasic
Imports System.Runtime.Remoting.Messaging

Public Class Form1
    Inherits System.Windows.Forms.Form

    Private mTCPClient As New TcpClient
    Private mNetStream As NetworkStream
    Private mBytes() As Byte
    Private intBytesRec As Int64
    Private mDataStream As NetworkStream
    Private mTCPData As New TcpClient

    Private mServerAddr As IPAddress
    Private mFTPPort As Int32 = 21
    Private mConnected As Boolean = False
    Private mFTPResponse As String

    Public Event ServerReplied(ByVal ServerReply As String)
    Public Event ServerCalled(ByVal CallMsg As String)
    Public Event ErrorOccured(ByVal ErrorCode As Integer, ByVal ErrMessage As String)
    Public Event Transferring(ByVal intTransferred As Integer, ByVal intTotalFile As Integer)


    Public Enum EC As Integer
        NoError = 0
        BuildConnectionFailed = 1
        ConnectionClosingFailed = 2
        DirListFailed = 3
        ProttectedChannelFailed = 4
        DownloadFailed = 5
        UploadFailed = 6
        FTPCommandFailed = 7
        FTPGetFileFailed = 8
        FTPPutFileFailed = 9
        InvalidEntry = 30
        ServerImproper = 31
        ServerRejectedUser = 32
        ServerRejectedPass = 33
        ServerDeniedDirList = 34
        InvalidFileLength = 35
        DownUpLoadFailure = 36
        UnknownError = 9999
    End Enum


#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer. 
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(768, 533)
        Me.Name = "Form1"
        Me.Text = "Form1"

    End Sub

#End Region

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim strTemp As String
        Dim code As String

        Dim priSM As New MemoryStream
        Dim intport As Int32


        mTCPClient.Connect("server", 21)
        mNetStream = mTCPClient.GetStream()


        'strTemp = GetResponse()
        ' code = strTemp.Substring(0, 4)


        strTemp = "USER test" & vbCrLf
        mBytes = Encoding.ASCII.GetBytes(strTemp)
        mNetStream.Write(mBytes, 0, mBytes.Length)

        strTemp = "PASS test" & vbCrLf
        mBytes = Encoding.ASCII.GetBytes(strTemp)
        mNetStream.Write(mBytes, 0, mBytes.Length)

        strTemp = "PASV" & vbCrLf
        mBytes = Encoding.ASCII.GetBytes(strTemp)
        mNetStream.Write(mBytes, 0, mBytes.Length)


        'strTemp = "LIST" & vbCrLf
        ' mBytes = Encoding.ASCII.GetBytes(strTemp)
        ' mNetStream.Write(mBytes, 0, mBytes.Length)



       









    End Sub

    Private Function GetResponse() As String
        Dim strTemp As String
        Do
            ReDim mBytes(mTCPClient.ReceiveBufferSize)
            intBytesRec = mNetStream.Read(mBytes, 0, CInt(mTCPClient.ReceiveBufferSize))
            strTemp = strTemp & Encoding.ASCII.GetString(mBytes, 0, intBytesRec)
        Loop While mNetStream.DataAvailable
        mFTPResponse = mFTPResponse & strTemp
        GetResponse = strTemp
    End Function


   

End Class
---

Problemet er så at
---
  Private Function GetResponse() As String
        Dim strTemp As String
        Do
            ReDim mBytes(mTCPClient.ReceiveBufferSize)
            intBytesRec = mNetStream.Read(mBytes, 0, CInt(mTCPClient.ReceiveBufferSize))
            strTemp = strTemp & Encoding.ASCII.GetString(mBytes, 0, intBytesRec)
        Loop While mNetStream.DataAvailable
        mFTPResponse = mFTPResponse & strTemp
        GetResponse = strTemp
    End Function
---

Ikke modtager f.eks NLST eller list...
Avatar billede dollas Nybegynder
31. august 2004 - 09:04 #6
Hejsa arne.

Kunne du hjælpe med det der FTP project ???

Jeg opretter gerne et nyt spørgsmål, hvor jeg sp sætter MAX point på, for din  hjælp.
Avatar billede arne_v Ekspert
06. september 2004 - 09:28 #7
Nu har jeg fået kigget lidt på det.

Din kode virker ikke fordi du ikke bruger data connecntion men kun kontrol
connection.

Her er et simpelt eksempel som kun understøtter LIST og NLST:

Imports System
Imports System.Text
Imports System.Net.Sockets
Imports System.Threading

Public Class FtpClient
    Private ctrl As TcpClient
    Private ctrlstm As NetworkStream
    Private data As TcpClient
    Private datastm As NetworkStream
    Private Shared Sub Send(ByVal stm As NetworkStream, ByVal line As String)
        Dim b As Byte() = Encoding.Default.GetBytes(line)
        stm.Write(b, 0, b.Length)
    End Sub
    Private Shared Function Receive(ByVal stm As NetworkStream) As String
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While stm.DataAvailable
            n = stm.Read(b, ix, b.Length - ix)
            ix += n
        End While
        Return Encoding.Default.GetString(b, 0, ix)
    End Function
    Public Shared Function Command(ByVal stm As NetworkStream, ByVal cmd As String) As String
        Send(stm, cmd + Convert.ToChar(13) + Convert.ToChar(10))
        Thread.Sleep(50)
        Return Receive(stm)
    End Function
    Private Sub SetupData()
        Dim dataaddr As String = Command(ctrlstm, "PASV")
        Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)
        Dim datahost As String = addrparts(0) + "." + addrparts(1) + "." + addrparts(2) + "." + addrparts(3)
        Dim dataport As Integer = Integer.Parse(addrparts(4)) * 256 + Integer.Parse(addrparts(5))
        data = New TcpClient (datahost, dataport)
        datastm = data.GetStream
    End Sub
    Public Sub New(ByVal host As String, ByVal username As String, ByVal password As String)
        ctrl = New TcpClient (host, 21)
        ctrlstm = ctrl.GetStream
        Command(ctrlstm, "USER " + username)
        Command(ctrlstm, "PASS " + password)
    End Sub
    Public Function Dir() As String
        SetupData
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function
    Public Function ShortDir() As String
        SetupData
        Command(ctrlstm, "NLST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function
    Public Sub Logout()
        Command(ctrlstm, "QUIT")
        ctrlstm.Close
        ctrl.Close
    End Sub
End Class

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim cli As FtpClient = New FtpClient ("localhost", "anonymous", "arne@")
        Console.WriteLine(cli.ShortDir)
        Console.WriteLine(cli.Dir)
        cli.Logout
    End Sub
End Class
Avatar billede arne_v Ekspert
06. september 2004 - 09:30 #8
Jeg kan også godt lave Put og Get hvis det skulle være.

Men princippet er meget simpelt: send STOR eller RETR kommandoen på
kontrol connection og skriv/læs selve filen på data connection.

Bemærk at jeg har lavet koden til at bruge PASV. Så du kan gå ud gennem
en firewall.
Avatar billede dollas Nybegynder
06. september 2004 - 19:31 #9
Du må gerne lave følgende: ( skriver det bare med danske ord, da jeg ikke lige kan huske de rigtige ftp commands)

upload
download
list
opret dir
slette dir
opret forbindelse
afbryd forbindelse


Super tak Arne :)
Avatar billede arne_v Ekspert
06. september 2004 - 21:22 #10
Men det første virker altså hos dig ?
Avatar billede arne_v Ekspert
06. september 2004 - 21:23 #11
Jeg kigger på de øvrige (list, opret og afbryd er der allerede).
Avatar billede dollas Nybegynder
07. september 2004 - 09:14 #12
Hmm, jeg har lige testet det...

Der noget galt her:

Private Sub SetupData()
        Dim dataaddr As String = Command(ctrlstm, "PASV")
        Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)
        Dim datahost As String = addrparts(0) + "." + addrparts(1) + "." + addrparts(2) + "." + addrparts(3)
        Dim dataport As Integer = Integer.Parse(addrparts(4)) * 256 + Integer.Parse(addrparts(5))
        data = New TcpClient(datahost, dataport)
        datastm = data.GetStream
    End Sub



fejl:
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in WindowsApplication16.exe

Additional information: Index was outside the bounds of the array.
Avatar billede arne_v Ekspert
07. september 2004 - 09:23 #13
Imports System
Imports System.IO
Imports System.Text
Imports System.Net.Sockets
Imports System.Threading

Public Class FtpClient
    Private ctrl As TcpClient
    Private ctrlstm As NetworkStream
    Private data As TcpClient
    Private datastm As NetworkStream

    Private Shared Sub Send(ByVal stm As NetworkStream, ByVal line As String)
        Dim b As Byte() = Encoding.Default.GetBytes(line)
        stm.Write(b, 0, b.Length)
    End Sub

    Private Shared Function Receive(ByVal stm As NetworkStream) As String
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While stm.DataAvailable
            n = stm.Read(b, ix, b.Length - ix)
            ix += n
        End While
        Return Encoding.Default.GetString(b, 0, ix)
    End Function

    Public Shared Function Command(ByVal stm As NetworkStream, ByVal cmd As String) As String
        Send(stm, cmd + Convert.ToChar(13) + Convert.ToChar(10))
        Thread.Sleep(50)
        Return Receive(stm)
    End Function

    Private Sub SetupData()
        Dim dataaddr As String = Command(ctrlstm, "PASV")
        Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)
        Dim datahost As String = addrparts(0) + "." + addrparts(1) + "." + addrparts(2) + "." + addrparts(3)
        Dim dataport As Integer = Integer.Parse(addrparts(4)) * 256 + Integer.Parse(addrparts(5))
        data = New TcpClient (datahost, dataport)
        datastm = data.GetStream
    End Sub

    Public Sub New(ByVal host As String, ByVal username As String, ByVal password As String)
        ctrl = New TcpClient (host, 21)
        ctrlstm = ctrl.GetStream
        Command(ctrlstm, "USER " + username)
        Command(ctrlstm, "PASS " + password)
    End Sub

    Public Function Dir() As String
        SetupData
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function

    Public Function ShortDir() As String
        SetupData
        Command(ctrlstm, "NLST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function

    Public Sub MkDir(ByVal dir As String)
        Command(ctrlstm, "MKD " + dir)
    End Sub

    Public Sub RmDir(ByVal dir As String)
        Command(ctrlstm, "RMD " + dir)
    End Sub

    Public Sub ChDir(ByVal dir As String)
        Command(ctrlstm, "CWD " + dir)
    End Sub

    Public Sub UpLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData
        Command(ctrlstm, "STOR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream (filename, FileMode.Open)
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While ix < f.Length
            n = f.Read(b, 0, b.Length)
            datastm.Write(b, 0, n)
            Thread.Sleep(100)
            ix += n
        End While
        f.Close
        datastm.Close
        data.Close
    End Sub

    Public Sub DownLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData
        Command(ctrlstm, "RETR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream (filename, FileMode.Create)
        Dim b(100000 - 1) As Byte
        Dim n As Integer
        While datastm.DataAvailable
            n = datastm.Read(b, 0, b.Length)
            f.Write(b, 0, n)
            Thread.Sleep(100)
        End While
        f.Close
        datastm.Close
        data.Close
    End Sub

    Public Sub Logout()
        Command(ctrlstm, "QUIT")
        ctrlstm.Close
        ctrl.Close
    End Sub
End Class

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim cli As FtpClient = New FtpClient ("localhost", "anonymous", "arne@")
        Console.WriteLine(cli.ShortDir)
        Console.WriteLine(cli.Dir)
        Directory.SetCurrentDirectory("C:\")
        cli.DownLoad("z.zip", True)
        cli.MkDir("subdir")
        cli.ChDir("subdir")
        cli.UpLoad("z.zip", True)
        cli.Logout
    End Sub
End Class
Avatar billede arne_v Ekspert
07. september 2004 - 09:23 #14
Med hensyn til fejl så forøg pausen lidt.
Avatar billede dollas Nybegynder
07. september 2004 - 09:49 #15
Super. Det virker..

Jeg er dog lidt i tvivl om hvordan jeg smækker hele ftpclient class i en tråd for sig selv, så jeg på den måde kan "arbejde" vidre i min form. ?

Forstår du ?

Jeg vil jo f.eks lave en annuller knap, og så kunne det jo være max hvis jeg bare kulle slå den tråd ned der køre ftpclient ?
Avatar billede arne_v Ekspert
07. september 2004 - 09:58 #16
Du laver en metode som gør tingene (svarende til Main i mit test program).

Du starter en tråd og annuler dræber tråden.

Det er lige ud af landevejen.

Lidt mere avanceret er at close data connection og sende en logout på
control connetction.
Avatar billede dollas Nybegynder
07. september 2004 - 10:23 #17
Ja, selvføgelig...

Det er jo morgen, og jeg har en masse GSM opgaver i mit hoved, så jeg var lige koblet af i 2 sekunder.

Men jeg takker mange gange, og håber at du næste gang jeg har brug for hjælp vil hjælpe mig... Dette har virkelig hjulpet mig på vej..

1000 tak...
Avatar billede dollas Nybegynder
07. september 2004 - 10:23 #18
point
Avatar billede dollas Nybegynder
07. september 2004 - 10:25 #19
lige en sidste ting... Hvis nu man sletter et dir med filer i, skal jeg så slette filer først heller tager den hele lortet?

JEg kan ikke teste lige nu, da min router har valgt at dø, og jeg benytter internet via mobil lige nu...
Avatar billede arne_v Ekspert
10. september 2004 - 23:45 #20
Jeg aner ikke om RMD kan slette et dir med filer i. Det må du teste når
du får fat i en ny router.
Avatar billede dollas Nybegynder
12. september 2004 - 18:22 #21
Lige et spørgsmål til denne her.

Jeg kan ikke lige finde ud af at grappe de talkode fejl man modtager. f.eks 550 for oprettelse af mappe der eksistere allerede...

Nogle ideer?
Avatar billede arne_v Ekspert
12. september 2004 - 18:26 #22
Hvis jeg husker rigtigt så er den først i Receive strengen.

Dim ix As Integer = resp.IndexOf(" ")
Dim code As Integer = Int32.Parse(res.Substring(0, ix - 1))

[utestet]
Avatar billede dollas Nybegynder
12. september 2004 - 18:31 #23
Det der må du lige skære ud i pap.

Skal jeg smække de 2 linie ind og så udskifte den første ?
Avatar billede arne_v Ekspert
12. september 2004 - 18:37 #24
Receive(ctrlstm)

skal erstattes med:

Dim resp As String = Receive(ctrlstm)
Dim ix As Integer = resp.IndexOf(" ")
Dim code As Integer = Int32.Parse(res.Substring(0, ix - 1))
' test på code
Avatar billede dollas Nybegynder
12. september 2004 - 18:45 #25
prøver det lige...

Kan du så lige sige hvordan jeg kun får direktoriet fra strengen: "c:\pwsweaew\dasdsa\ddasf.txt"

?

Skal jo bruge det til upload funktionen, for når man skal uploade skal man jo sætte currentdirectory til der hvor filen kommer fra, right?
Avatar billede dollas Nybegynder
12. september 2004 - 18:48 #26
Det der receive kan jeg ikke lige få til at fungere.
Avatar billede arne_v Ekspert
12. september 2004 - 18:50 #27
Prøv

(New FileInfo(filename)).DirectoryName
Avatar billede arne_v Ekspert
12. september 2004 - 18:50 #28
Hvad sker der ?
Avatar billede dollas Nybegynder
12. september 2004 - 19:09 #29
Skal det ind i command eller receive funktionen?

For den skriver as ctrlstm ikke kan findes og res er privat
Avatar billede arne_v Ekspert
12. september 2004 - 19:12 #30
Vi tager lige et eksempel:

    Public Function Dir() As String
        SetupData
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function

->

    Public Function Dir() As String
        SetupData
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Dim resp As String = Receive(ctrlstm)
        Dim ix As Integer = resp.IndexOf(" ")
        Dim code As Integer = Int32.Parse(res.Substring(0, ix - 1))
        Console.WriteLine("Vi got a " & code)
        datastm.Close
        data.Close
        Return res
    End Function
Avatar billede dollas Nybegynder
12. september 2004 - 19:13 #31
Nu kokser det helt for mig. Den vil ikke uploade.. Den skriver på min ftp server no permission, men der ER skrive rettigheder.
Avatar billede dollas Nybegynder
12. september 2004 - 19:16 #32
I den nye dir kommer der følgende fejl:

Additional information: Cannot access a disposed object named "System.Net.Sockets.NetworkStream".
Avatar billede arne_v Ekspert
12. september 2004 - 19:32 #33
Den påstår at vi forsøger at bruge en connection som er garbage collectet
Avatar billede arne_v Ekspert
12. september 2004 - 19:33 #34
Int32.Parse(res.Substring(0, ix - 1))

skal iøvrigt være

Int32.Parse(resp.Substring(0, ix - 1))
Avatar billede dollas Nybegynder
12. september 2004 - 20:44 #35
nu har jeg rettet det...

Men der kommer stadigvæk den fejl
Avatar billede arne_v Ekspert
12. september 2004 - 20:47 #36
Og den fejl kom da du begyndte at parse code ud og du har ikke lavet andre
rettelser ?
Avatar billede dollas Nybegynder
12. september 2004 - 20:53 #37
Jeg har sku lavet meget...

Jeg kan jo poste det hele her, eller sende en email ?
Avatar billede dollas Nybegynder
12. september 2004 - 20:55 #38
Public Class FtpClient
    Private ctrl As TcpClient
    Private ctrlstm As NetworkStream
    Private data As TcpClient
    Private datastm As NetworkStream

    Private Shared Sub Send(ByVal stm As NetworkStream, ByVal line As String)
        Dim b As Byte() = Encoding.Default.GetBytes(line)
        stm.Write(b, 0, b.Length)
    End Sub

    Private Shared Function Receive(ByVal stm As NetworkStream) As String
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While stm.DataAvailable
            n = stm.Read(b, ix, b.Length - ix)
            ix += n
        End While

        Return Encoding.Default.GetString(b, 0, ix)
    End Function

    Public Shared Function Command(ByVal stm As NetworkStream, ByVal cmd As String) As String
        Send(stm, cmd + Convert.ToChar(13) + Convert.ToChar(10))
        Thread.Sleep(250)

        'Dim resp As String = Receive(stm)
        'Dim ix As Integer = resp.IndexOf("")
        'Dim code As Integer = Int32.Parse(res.substring(0, ix - 1))


        Return Receive(stm)


    End Function

    Private Sub SetupData()
        Dim dataaddr As String = Command(ctrlstm, "PASV")
        Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)
        Dim datahost As String = addrparts(0) + "." + addrparts(1) + "." + addrparts(2) + "." + addrparts(3)
        Dim dataport As Integer = Integer.Parse(addrparts(4)) * 256 + Integer.Parse(addrparts(5))
        data = New TcpClient(datahost, dataport)
        datastm = data.GetStream
    End Sub

    Public Sub New(ByVal host As String, ByVal username As String, ByVal password As String)
        ctrl = New TcpClient(host, 21)
        ctrlstm = ctrl.GetStream
        Command(ctrlstm, "USER " + username)
        Command(ctrlstm, "PASS " + password)
    End Sub

    Public Function Dir() As String
        SetupData()
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Dim resp As String = Receive(ctrlstm)
        Dim ix As Integer = resp.IndexOf(" ")
        Dim code As Integer = Int32.Parse(resp.Substring(0, ix - 1))
        Console.WriteLine("Vi got a " & code)

        datastm.Close()
        data.Close()
        Return res
    End Function



    Public Function ShortDir() As String
        SetupData()
        Command(ctrlstm, "NLST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close()
        data.Close()
        Return res
    End Function

    Public Sub MkDir(ByVal dir As String)
        Command(ctrlstm, "MKD " + dir)
    End Sub

    Public Sub RmDir(ByVal dir As String)
        Command(ctrlstm, "RMD " + dir)
    End Sub

    Public Sub Delete(ByVal dir As String)
        Command(ctrlstm, "DELE " + dir)
    End Sub

    Public Sub ChDir(ByVal dir As String)
        Command(ctrlstm, "CWD " + dir)
    End Sub

    Public Sub UpLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData()
        Command(ctrlstm, "STOR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream(filename, FileMode.Open)
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While ix < f.Length
            n = f.Read(b, 0, b.Length)
            datastm.Write(b, 0, n)
            Thread.Sleep(100)
            ix += n
        End While
        f.Close()
        datastm.Close()
        data.Close()
    End Sub

    Public Sub DownLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData()
        Command(ctrlstm, "RETR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream(filename, FileMode.Create)
        Dim b(100000 - 1) As Byte
        Dim n As Integer
        While datastm.DataAvailable
            n = datastm.Read(b, 0, b.Length)
            f.Write(b, 0, n)
            Thread.Sleep(100)
        End While
        f.Close()
        datastm.Close()
        data.Close()
    End Sub

    Public Sub Logout()
        Command(ctrlstm, "QUIT")
        ctrlstm.Close()
        ctrl.Close()
    End Sub



End Class
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester