Gateway_man Geschrieben 5. November 2010 Geschrieben 5. November 2010 Hi, ich schreib mir gerade eine kleine FTP Client Klasse, welche über die gängigsten Funktionen beinhalten soll. Jedoch gestaltet sich der NLST Befehl als recht schwierig. Beziehungsweise das verständis dafür fehlt mir anscheinend, da die Response vom FTP Server Null ist. Beschreibung des NLST und des PASV Befehls. Ich hab mal die entsprechenden Zeile rausgesucht. Das wäre demnach mein aktueller stand: #Region "Fields" Private Const BUFFER_SIZE As Integer = 4090 Private _Buffer(BUFFER_SIZE) As Byte Private enc As Encoding = Encoding.ASCII Private writer As StreamWriter = Nothing Private reader As StreamReader = Nothing #End Region Public Sub NLST() WaitForResponse(writer) Dim s As Socket = Datasocket() writer.WriteLine("NLST" & vbCr & vbLf) WaitForResponse(reader) Dim response As String = String.Empty While True Dim retval As Integer = 0 retval = reader.BaseStream.Read(_Buffer, 0, _Buffer.Length) response &= enc.GetString(_Buffer) If retval < BUFFER_SIZE Then Exit While End If End While ClearBuffer() MsgBox(response) response = String.Empty While True Dim retval As Integer = 0 retval = s.Receive(_Buffer, 0, SocketFlags.None) response &= enc.GetString(_Buffer, 0, retval) If retval < BUFFER_SIZE Then Exit While End If End While 'Der response String sollte jetzt eigentlich 'die Dateinamen des aktuellen Verzeichnisses 'per Carage Return Linefeed seperiert beinhalten. MsgBox(response) ClearBuffer() End Sub Public Function Datasocket() As Socket Dim s As Socket = Nothing WaitForResponse(writer) writer.WriteLine("PASV" & vbCr & vbLf) WaitForResponse(reader) Dim response As String = String.Empty While True Dim retval As Integer = 0 retval = reader.BaseStream.Read(_Buffer, 0, _Buffer.Length) response &= enc.GetString(_Buffer) If retval < BUFFER_SIZE Then Exit While End If End While ClearBuffer() If response.Contains("227") Then Dim cache As String = response.Substring(response.IndexOf("(") + 1, response.LastIndexOf(")") - response.IndexOf("(") - 1) Dim fields As String() = Split(cache, ",") s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) s.Connect(fields(0) & "." & fields(1) & "." & fields(2) & "." & fields(3), (fields(4) * 256) + fields(5)) End If Return s End Function Würde mich freuen, wenn mir jemand helfen könnte. lg Gateway Zitieren
Gateway_man Geschrieben 5. November 2010 Autor Geschrieben 5. November 2010 Hat sich bereits erledigt. lg Gateway Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.