[Visual Basic 2010] FTP-Tutorial + Anwendungsbeispiel / Kleines FTP-Chat

08/28/2012 22:34 maxasoft#1
In letzter Zeit wurde ich häufig gefragt, wie man FTP mit Visual Basic 2010 Express benutzt, deshalb dachte ich mir, mach ich doch mal ein Tutorial, in dem ich euch zeige, wie ihr einen FTP-Server in eure Programme einbinden könnt, um beispielsweise Dateien oder Strings auf den Server zu laden oder zu Downloaden. Wenn ihr erstmal das Grundprinzip verstanden habt ist es sehr einfach, und ihr könnt Sachen wie Lizenzsysteme usw. machen.


Ich werde folgende Unterpunkte behandeln:

-was ist FTP?
-einen FTP-Server einrichten
-Dateien und Strings downloaden
-Dateien und Strings uploaden
-Datei von FTP-Server umbenennen
-Datei von FTP-Server löschen
-FTP anwenden/Beispielprogramm
-Vor- und Nachteile


1. Was ist FTP?

File Transfer Protocol (Deutsch: Dateiübertragungsprotokoll) ist eine Art Netzwerkprotokoll, welches zur Dateiübertragung verwendet werden kann.

2. einen FTP-Server einrichten

Um überhaupt einen FTP-Server in unseren Programmen zu verwenden, müssen wir uns erstmal einen besorgen. Einen webspace bekommt man kostenlos im Internet, man kann aber auch einen kaufen, aber für den Anfang reicht ein kostenloser.

Den Webspace nehmen wir jetzt mal beispielsweise von [Only registered and activated users can see links. Click Here To Register...]. Wenn ihr schon einen habt könnt ihr den natürlich auch verwenden, vorrausgesetzt ihr wisst den Benutzername und das Passwort, was ich aber noch erklären werde.
Als erstes registriert ihr euch und loggt euch ein.

Dann klickt ihr links oben in der Navigationsleiste auf "Neues Projekt" :

[Only registered and activated users can see links. Click Here To Register...]

Dann müsst ihr die Projektart auswählen. Für FTP-Zugriff brauchen wir einen Webspace:

[Only registered and activated users can see links. Click Here To Register...]

Nun müssen wir auf der darrauffolgenden Seite eine Art Formular ausfüllen:

[Only registered and activated users can see links. Click Here To Register...]

Dann müssen wir noch einen Domainnamen angeben. Dieser ist allerdings nur für Webseiten interessant:

[Only registered and activated users can see links. Click Here To Register...]

Dann wird unser Projekt eingerichtet. Wie beschrieben kann das bis zu 15 min dauern:

[Only registered and activated users can see links. Click Here To Register...]

Wenn wir jetzt auf unser angelegtes Projekt klicken und runterscrollen, können wir dort unsere Zugangsdaten für den FTP-Server sehen:

[Only registered and activated users can see links. Click Here To Register...]

Das Passwort für den Server ist unser Accountpasswort.
Um jetzt zu sehen, welche Dateien sich auf unserem FTP-Server befinden, brauchen wir noch einen Clienten. Der beste den ich kenne ist [Only registered and activated users can see links. Click Here To Register...].

Wenn ihr es installiert habt, könnt ihr euch nun mit eurem FTP-Server verbinden.

Die Zugangsdaten kennen wir ja jetzt.

Das Textfeld "Port" lasst ihr einfach leer.
Wenn ihr alles richtig gemacht habt seid ihr nun mit eurem FTP-Server verbunden.
jetzt könnt ihr die Dateien und Ordner betrachten, welche sich in eurem Webspace befinden.
Normalerweise ist euer Webspace leer, bis auf den Ordner "www".
Dieser Ordner ist für Webseiten gedacht.

Um Strings hochzuladen brauchen wir aber erst eine .txt Datei.
Normalerweise könnt ihr einfach eine auf dem Desktop erstellen und sie in eure Webspace ziehen,
doch wir machen es mit Visual Basic!!!

3. Dateien und Strings uploaden

Für die verbindung zwischen dem FTP-Server und eurem Programm braucht ihr einen Webclient. Dafür legen wir eine Variable an:

Dim client As New Net.WebClient

Mithilfe des Clients können wir uns nun mit dem FTP-Server verbinden:

Client.Credentials = New Net.NetworkCredential("Username", "Passwort")

Logischerweise sind die Logindaten die selben wie die, die wir in Filezilla verwendet haben.

Nun sind wir verbunden und können Daten zwischen dem Server und userem Computer austauschen. Da wir später mal Strings hochladen wollen,
werden wir mal eine .txt-Datei hochladen.

Wichtig: Die .txt-Datei muss vorher auf unserem PC gespeichert sein!
Also erstellen wir uns eine neue unter C:/Users/Public

Die Datei nennen wir einfach mal Text.txt.

Wichtig: Ihr könnt die .txt-datei überall speichern, um Fehler zu vermeiden habe ich aber den Ordner Public verwendet, da dieser Ordner "Öffentlich"
geändert werden kann, was später im Programm wichtig ist!

Nun laden wir das ganze auf unseren Server hoch:

My.Computer.Network.UploadFile("C:\Users\Public\Te xt.txt", "ftp://www12.subdomain.com/Text.txt", "Benutzername", "Passwort")


Als erstes geben wir den Dateipfad an, damit das Programm weiss, welche Datei es hochladen soll.
Dann geben wir unseren FTP-Server an und den zukünftigen Dateiname auf dem FTP-Server.

Wichtig: www12.subdomain.com ist NUR EIN BEISPIEL! Natürlich müsst ihr wieder eure eigene nehmen, wie ihr sie bei Filezilla angegeben habt.

Am Ende wieder die Benutzerdaten.

Nun debuggen wir das ganze und wecheseln zu Filezilla. Dann verbinden wir uns erneut und siehe da; eine Datei mit dem Namen Text.txt.

Diese Datei ist jetzt erstmal leer. Doch das wollen wir ändern!

Natürlich mit Visual Basic ^^

Als erstes erstellen wir wieder eine Client-Variable und die Verbindung:

Dim client As New Net.Webclient
client.Credentials = New Net.NetworkCredential("Username","Passwort")

Und nun laden wir unseren ersten String in die Datei Text.txt auf unserem FTP-Server:

client.UploadString("ftp://www12.subdomain.com/Text.txt", "Es hat geklappt!")

Dann deguggen wir das ganze und wechseln wieder zu Filezilla.
Nun macht ihr einen Doppelklick auf die Datei Text.txt. Jetzt könnt ihr den text lesen, den wir oben verwendet haben (:

Aber das ganze geht natürlich auch umgekehrt:

4. Dateien und Strings Downloaden

Wie immer müssen wir uns logischer weise wieder verbinden. Ich denke mal ihr solltet den Code dafür schon kennen, ich werde ihn allerdings der
Vollständigkeit halber dazuschreiben:

Dim client As New Net.Webclient
client.Credentials = New Net.NetworkCredential("Username","Passwort")

Wir fangen mit dem Downloaden von Dateien an. Allerdings müssen wir den Speicherort der Datei angeben, und wie beim hochladen nehmen wir wieder C:/Users/Public
Weil dort aber schon eine Datei mit dem namen Text.txt vorhanden ist, und wir beim Downloaden ja die selbe dort speichern wollen, löschen wir die alte, leere Datei:

If My.Computer.FileSystem.FileExists("C:\Users\Public \Text.txt") = True Then
Kill("C:\Users\Public\Text.txt")
End If

Nun ist Platz für die neue Datei, welche wir uns mit folgendem Code vom FTP-Server ziehn:

My.Computer.Network.DownloadFile("ftp://www12.subdomain.com/Text.txt, "C:\Users\Public\Text.txt", "Username", "Passwort")

Was ist passiert?

Als erstes geben wir die Datei an,welche wir runterladen wollen.
Dann geben wir einen Speicherort an und wieder die Logindaten.

Genauer genommen würde dieser Code auch ohne den Client und den Login funktionieren, da wir aber noch Strings downloaden wollen, hab ich ihn mal dazu gemacht, das Selbe
gilt auch für das Uploaden.

So, wenn wir jetzt den Ordner C:/Users/Public öffnen und die Datei Text.txt öffnen, können wir sehen, dass die Datei nun nicht mehr leer ist, sondern der Text,
welchen wir hochgeladen haben, vorhanden ist.

Nun wollen wir die Datei aber nicht erst Downloaden um uns den Inhalt anzusehn, wir wollen nur den Text. Für diesen Fall kann man mit folgendem Code ganz einfach den
String downloaden:

'Client erstellen
Dim client As New Net.Webclient
'Verbinden
client.Credentials = New Net.NetworkCredential("Username","Passwort")
'String downloaden

Richtextbox1.text = client.DownloadString("ftp://www12.subdomain.com/Text.txt")

Nun wird in der Richtextbox der Text aus der Datei Text.txt, welche sich auf unserem Server befindet, angezeigt.

5. Datei von FTP-Server umbenennen

Das umbenennen funktioniert über FTPWebrequest, und nicht über den client:

Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create("Link zum FTP-Ordner")
request.Method = Net.WebRequestMethods.Ftp.ListDirectory
request.Credentials = New Net.NetworkCredential("Benutzername", "Passwort")
Dim response As Net.FtpWebResponse = request.GetResponse()

6. Dateien von FTP-Server löschen

Das löschen funktioniert ebenfalls über Request.
Der Code zum Löschen von Dateien ist folgender:


Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create("Link zur datei")
request.Method = Net.WebRequestMethods.Ftp.DeleteFile
request.Credentials = New Net.NetworkCredential("Benutzername", "Passwort")
Dim response As Net.FtpWebResponse = request.GetResponse()


8. FTP anwenden/Beispielprogramm

Als Beispielprogramm nehmen wir jetzt mal ein Chat. FTP für ein Chat zu verwenden ist zwar nicht empfehlenswert, aber so versteht man wenigstens das Prinzip von FTP gut (:
Wir brauchen natürlich noch eine neue .txt-Datei auf unserem Server.
Die ziehen wir uns jetzt einfach mal so per Filezilla rein und nennen sie Chat.txt.
Dann erstellen wir uns ein neues Projekt in Visual Basic und gestalten mal die Form.

Die Steuerelemente die wir verwenden sind:

2 Richtextboxen
1 Button
1 Timer mit dem Intervall 5000 und Enabled = True
1 Label
1 Textbox

So sieht das dann aus:

[Only registered and activated users can see links. Click Here To Register...]

Ist zwar keine designerische Höchstleistung aber darum geht es nicht (:

Dann machen wir einen Doppelklick auf den "Senden" -Button und schreiben da als Code rein:

Dim alter_text As String
Dim client As New Net.WebClient
client.Credentials = New Net.NetworkCredential("Username", "Passwort")
'alten Text downloaden
alter_text = client.DownloadString("FTP://www19.Subdomain.com/Chat.txt")
'Text hochladen
client.UploadString("ftp://www19.subdomain.com/Chat.txt", alter_text & TextBox1.Text & ":" & RichTextBox2.Text & vbCrLf)

Was ist passiert?

Als erstes erstellen wir natürlich eine Verbindung.
Dann laden wir den alten String runter.
Und zum Schluss laden wir diesen wieder hoch, allerdings fügen wir den Inhalt der Textbox1, welche den Namen beinhaltet, hinzu, und die eigentliche Nachricht aus der Richtextbox2

Nun wollen wir aber noch den Chatverlauf lesen können. Dafür müssen wir den Inhalt der Textdatei in die Richtextbox1 einfügen. Und hier verwenden wir den Timer. Also einen Doppelklick auf den Timer und dann diesen Code einfügen:

Dim client as new net.WebClient
client.Credentials = New Net.NetworkCredential ("Username","Passwort")
Richtextbox1.text = client.DownloadString("FTP://www19.Subdomain.com/Chat.txt")

Was ist passiert?

als erstes natürlich wie immer die Verbindung und dann wird der Text aus der .txt-Datei in unsere Richtextbox eingefügt.

Das wars eingentlich schon mit dem Coden, jetzt haben wir ein ganz simples Chat. Normalerweise ist FTP nicht gerade das Beste für ein Chat, da ist TCP schon besser geeignet, aber zur Verdeutlichung ist es optimal.

9.. Vor- und Nachteile

Zum Schluss wollte ich euch noch mit den Vor- und Nachteilen vertraut machen.

Vorteile:

- einfache Benutzung
- Einen Webspace gibt es kostenlos im Internet

Nachteile:
-Jeder, der das Programm in die Finger bekommt, kann die Zugangsdaten zum Server auslesen


So, das war dann mal mein erstes Tutorial auf e*pvpers und hat auch gedauert es zu schreiben, ich hoffe ich konnte euch helfen und euch mit FTP vertraut machen.

Wenn ihr noch Fragen habt, dann scheißt auf die Leute die sagen, das ist doch einfach, das kann man sich ja denken usw. und fragt einfach ;)
08/29/2012 16:25 LaMiy#2
Im grundegenommen ist der Datenaustauscht mit FTP, ich nenne es mal, o.k Allerdings muss jedem klar sein, dass die Daten mit FTP unter gar keinen Umständen sicher sind.
Bei einem Chat ist der Nachteil, dass jeweils nur ein Client auf die "Chattdatei" zugreifen kann.
Informier dich mal über TCP/IP :)
Liebe Grüße ;)
08/29/2012 20:09 maxasoft#3
Quote:
Originally Posted by LaMiy View Post
Im grundegenommen ist der Datenaustauscht mit FTP, ich nenne es mal, o.k Allerdings muss jedem klar sein, dass die Daten mit FTP unter gar keinen Umständen sicher sind.
Bei einem Chat ist der Nachteil, dass jeweils nur ein Client auf die "Chattdatei" zugreifen kann.
Informier dich mal über TCP/IP :)
Liebe Grüße ;)
Oben hab ichs geschrieben das TCP/IP sehr viel besser für ein Chat ist als FTP aber es geht nicht um das Chat sondern um das Prinzip von FTP!
08/29/2012 21:08 LaMiy#4
Hab's nicht ganz durchgelesen und wollte das nur nochmal klarstellen :) Sonst gutes TUT :)
09/04/2012 10:52 maxasoft#5
Quote:
Originally Posted by LaMiy View Post
Hab's nicht ganz durchgelesen und wollte das nur nochmal klarstellen :) Sonst gutes TUT :)
Dafür gibt es eig den Thanks Button aber egal danke ;)
09/04/2012 20:47 'Heaven.#6
du kannst auch deine exe obfuscaten dann kann man sie nichtmehr so leicht decompilen um die logindaten auszulesen
09/04/2012 23:00 maxasoft#7
Quote:
Originally Posted by 'Heaven. View Post
du kannst auch deine exe obfuscaten dann kann man sie nichtmehr so leicht decompilen um die logindaten auszulesen
Ich hab schon von sowas gehört aber ich werds mal testen ;)
09/05/2012 12:22 Kraizy​#8
Quote:
Originally Posted by maxasoft View Post
Oben hab ichs geschrieben das TCP/IP sehr viel besser für ein Chat ist als FTP
und trotzdem machst du ein ftp chat tutorial? oke.
09/05/2012 12:47 maxasoft#9
Quote:
Originally Posted by xKraizy View Post
und trotzdem machst du ein ftp chat tutorial? oke.
Chat Tutorial?

Hast dus denn überhaupt gelesen?

Das Chat dient nur zur Verdeutlichung ^^
09/05/2012 14:28 kissein#10
Ich habs nur überflogen, aber als Kritik würde ich aufführen das Codeblöcke bitte auch in dem entsprechenden [CODE]-Tag zu versehen sonst wirds ab der mitte ziemlich unübersichtlich im Tut
09/09/2012 20:17 BigJk#11
Quote:
Originally Posted by 'Heaven. View Post
du kannst auch deine exe obfuscaten dann kann man sie nichtmehr so leicht decompilen um die logindaten auszulesen
Bringt gar nix. Einfach Wireshark (oder ähnliches) benutzen und FTP Port mitlesen... so kann man schnell und einfach den Login und das Password raus bekommen.
10/14/2012 17:49 Princilein#12
nice =)
11/14/2012 15:29 TheUltratester123#13
werde mal anschauen wie meins wird :D