FTP Bibliothek von BigSnake
Für alle denen mein Tut noch zu umständlich ist kommt hier die bequeme Methode, eine Bibliothek die schon alle wichtigen und bald alle FTP Befehle unterstützt. Bin für Bugfixes und Anregungen immer offen 8)

/edit
Auf Anregung von Hot Bit
"Mit diesen FTP Kommandos hat man Vollzugriff auf die Daten des Servers, insofern man über Username und Passwort verfügt"

Sprich ihr könnt mit der Lib alles machen, was man auch mit einem FTP Client machen kann. Zum Beispiel Updates von eurem Spiel selbstständig laden lassen, Highscores auf Servern ablegen etc. Die Möglichkeiten sind grenzenlos, meine Zeit allerdings nicht, daher müßt ihr ohne Beispiel auskommen
/edit

[code:1:1a117014b8]
; (C) 2003 by Lars Roth
; Kontakt : BigSnake@web.de
; Diese Datei ist Freeware und darf beliebig benutzt, verwendet und weitergegeben werde.
; Wird sie in einem BB Projekt benutzt, so muß sie in den Credits aufgeführt sein und als Kopie
; des Originals beiliegen

; Fehler Konstanten

Const FtpCodeOk = 1 ; Kein Fehler
Const FtpCodeNoTCPConnection = -255 ; Kann keine TCP Verbindung herstellen
Const FtpCodeWrongUserName = -1 ; Falscher Benutzername
Const FtpCodeWrongPassword = -2 ; Falsches Passwort
Const FtpCodeNoSuchFileDirectory = -3 ; Keine Datei oder Verzeichnis
Const FtpCodeNoMode = -4 ; Falscher Modus oder Modus nicht unterstützt

; Funktion : Ftp Connect
; Stellt eine Verbindung zu einem FTP Server her. Muß immer ausgeführt werden, bevor man
; irgendwelche anderen Ftp Funktionen aufrufen kann.
; Übergeben wird die komplette Adresse inklusive demn führendem ftp
; Gibt den Handle des FtpStreams zurück
; Wenn ein Fehler auftritt wird der Fehlercode zurückgegeben

Function FtpConnect(Adress$,Username$,Password$)
; Lokale Variablen
Local FtpStream
Local Result$ ; Rückgabewerte des Servers
; Funktionskörper
; TCP Verbindung für Kommandos an den FTP Server
FtpStream = OpenTCPStream(Adress$,21)
If Not FtpStream Return FtpCodeNoTCPConnection
; User Anmeldung
; Liest die Begrüßung aus
Result = ReadLine(FtpStream)
;Print Result
WriteLine FtpStream,"USER "+Username$
Result = ReadLine(FtpStream)
;Print Result
If Int(Left(Result,3)) > 500 Then
; Falscher Username
CloseTCPStream FtpStream
Return FtpCodeWrongUsername
EndIf
; Passwort Übergabe
WriteLine FtpStream,"PASS "+Password$
Result = ReadLine(FtpStream)
;Print Result
If Int(Left(Result,3)) > 500 Then
; Falsches Passwort
CloseTCPStream FtpStream
Return FtpCodeWrongPassword
EndIf
; Gibt den Handle zurück
Return FtpStream
End Function

; Funktion : Ftp Disconnect
; Beendet die Verbindung zu einem FTP Server. Sollte auf jeden Fall ausgeführt werden,
; nachdem man den FTP Server nicht mehr benötigt und bevor man das Programm beendet

Function FtpDisconnect(FtpStream)
; Sendet Quit Befehl
WriteLine FtpStream,"QUIT"
; Schließt die TCP Verbindung
CloseTCPStream FtpStream
End Function

; Funktion : Ftp Upload
; Lädt eine Datei auf den Ftp Server. Man muß zuerst auf dem Ftp Server in das passende Verzeichnis
; wechseln. File Name ist der Pfad und Dateiname auf dem lokalen Rechner. ServerName ist der Datei-
; name auf dem Server
; Gibt 1 zurück, wenn die Datei übertragen wurde und 0, wenn ein Fehler aufgetreten ist

Function FtpUpload(FtpStream,FileName$,ServerName$)
; Lokale Variablen
Local Result$ ; Rückgabe vom Server
Local File ; Datei Pointer
Local Bank ; Die Bank
Local DataStream ; Der Daten Stream
Local ByteCount ; Anzahl der gelesenen Bytes
; Funktionskörper
; Öffnet die Datei
File = ReadFile(FileName$)
If Not File Then
Print "Die Datei existiert lokal nicht."
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
WaitKey
End
EndIf

; Fragt nach einer neuen Daten Verbindung
WriteLine FtpStream,"PASV"
Result = ReadLine(FtpStream)
Print Result
DataStream = FtpDataConnect(Result)
If Not DataStream Then
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
Print "Es konnte keine Datenverbindung aufgebaut werden"
WaitKey
End
EndIf

; Korrigiert den ServeName
ServerName = Replace(ServerName,"","/")

; Bereitet den Server auf das Senden vor
WriteLine FtpStream,"STOR "+ServerName$
Result = ReadLine(FtpStream)
If Int(Left(Result,3)) <> 150 Then
; Datei kann nicht hochgeladen werden
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
CloseTCPStream DataStream
Print "Datei kann nicht hochgeladen werden"
WaitKey
End
EndIf

; Erstellt den 16 KB Buffer
Bank = CreateBank(16384)

; Schreibt die Daten auf den Server
Repeat
; Liest 16 KB aus der Datei
ByteCount = ReadBytes(Bank,File,0,16384)
; Schreibt die Bytes in den Datenstrom
WriteBytes(Bank,DataStream,0,ByteCount)
Until ByteCount <> 16384

; Schließt die Datei
CloseFile File

; Löscht die Bank aus dem Speicher
FreeBank Bank

; Liest ein, ob die Datei beim Server angekommen ist
Result = ReadLine(FtpStream)

; Gibt den Datenstrom wieder frei
CloseTCPStream DataStream
End Function

; Funktion : Ftp Download
; Lädt eine Datei vom Server aus dem aktuellem Verzeichnis und speichert sie auf der Festplatte
; Filename ist der Dateiname + Pfad auf der Festplatte wohin die Datei ServerName gespeichert werden
; soll
; Gibt 1 zurück, wenn die Datei übertragen wird und 0 bei Fehlern

Function FtpDownload(FtpStream,Filename$,ServerName$)
; Lokale Variablen
Local Result$ ; Rückgabe vom Server
Local File ; Datei Pointer
Local Bank ; Die Bank
Local DataStream ; Der Daten Stream
Local ByteCount ; Anzahl der gelesenen Bytes
; Funktionskörper
; Erzeugt die Datei
File = WriteFile(FileName$)
If Not File Then
Print "Die Datei konnte lokal nicht erzeugt werden."
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
WaitKey
End
EndIf

; Fragt nach einer neuen Daten Verbindung
WriteLine FtpStream,"PASV"
Result = ReadLine(FtpStream)
Print Result
DataStream = FtpDataConnect(Result)
If Not DataStream Then
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
Print "Es konnte keine Datenverbindung aufgebaut werden"
WaitKey
End
EndIf

; Korrigiert den ServeName
ServerName = Replace(ServerName,"","/")

; Bereitet den Server auf das Empfangen vor
WriteLine FtpStream,"RETR "+ServerName$
Result = ReadLine(FtpStream)
If Int(Left(Result,3)) <> 150 Then
; Datei kann nicht hochgeladen werden
WriteLine FtpStream,"QUIT"
CloseTCPStream FtpStream
CloseTCPStream DataStream
Print "Datei kann nicht downgeloadet werden"
WaitKey
End
EndIf

; Erstellt den 16 KB Buffer
Bank = CreateBank(16384)

; Schreibt die Daten vom Server in die Datei
Repeat
; Liest 16 KB vom Server
ByteCount = ReadBytes(Bank,DataStream,0,16384)
; Schreibt die Bytes in die Datei
WriteBytes(Bank,File,0,ByteCount)
Until ByteCount <> 16384

; Schließt die Datei
CloseFile File

; Löscht die Bank aus dem Speicher
FreeBank Bank

; Liest ein, ob die Datei beim Server angekommen ist
Result = ReadLine(FtpStream)

; Gibt den Datenstrom wieder frei
CloseTCPStream DataStream

End Function

; Funktion : Ftp Change Directory
; Wechselt zum angegebenem Unter Verzeichnis auf dem FTP Server

Function FtpChangeDirectory(FtpStream,Directory$)
; Tauscht gegen / im Pfad
Local DirPath$ = Directory$
Local Result$
DirPath = Replace(DirPath,"","/")
; Wechselt das Verzeichnis
WriteLine FtpStream,"CWD "+DirPath$
Result = ReadLine(FtpStream)
If Int(Left(Result,3)) > 500 Then
Return FtpCodeNoSuchFileDirectory
Else
Return FtpCodeOk
EndIf
End Function

; Funktion : Ftp Parent Directory
; Wechselt zum übergeordnetem Verzeichnis

Function FtpParentDirectory(FtpStream)
WriteLine FtpStream,"CDUP"
Local Result$ = ReadLine(FtpStream)
If Int(Left(Result,3)) > 500 Then
Return FtpCodeNoSuchFileDirectory
Else
Return FtpCodeOk
EndIf
End Function

; Funktion : Ftp ASCII Mode
; Schaltet den Server in den ASCII Modus. Mit jenem lassen sich Textdateien empfangen und
; verschicken

Function FtpASCIIMode(FtpStream)
WriteLine FtpStream,"TYPE A"
Local Result$ = ReadLine(FtpStream)
If Int(Left(Result,3)) <> 200 Then
Return FtpCodeNoMode
Else
Return FtpCodeOk
EndIf
End Function

; Funktion : Ftp Binary Mode
; Schaltet den Server in den Binär Modus. Mit jenem lassen sich Binär Dateien verschicken
; und empfangen

Function FtpBinaryMode(FtpStream)
WriteLine FtpStream,"TYPE I"
Local Result$ = ReadLine(FtpStream)
If Int(Left(Result,3)) <> 200 Then
Return FtpCodeNoMode
Else
Return FtpCodeOk
EndIf
End Function

; Funktion : Ftp Data Connect
; Hilfsfunktion, direkter Aufruf wird nicht empfolen. Entschlüsselt
; vom Server übergebene IP und Port und verbindet mit einem Data Stream dorthin

Function FtpDataConnect(IPP$)
; Die Funktion entschlüsselt IP und Port, verbindet dorthin und gibt den Handle zurück
Local Connection
Local IP$
Local Port$
Local Count
Local StrPos
Local Buffer$
; Prüft, ob die ersten drei Zeichen 227 sind
If Left(IPP,3) = 227 Then
; Kopiert den Abschnitt mit den Klammern auf dem String
StrPos = Instr(IPP,"(",1)
Buffer = Right(IPP,Len(IPP)-StrPos)
; Entfernt die Klammern
Buffer = Left(Buffer,Len(Buffer)-1)
; Trennt IP und Port Teil
StrPos = 0
For Count = 1 To 4 Step 1
StrPos = Instr(Buffer,",",StrPos+1)
Next
; Nach dem vierten Kommata steht der Port Code
IP$ = Left(Buffer,Len(Buffer)-(Len(Buffer)-StrPos)-1)
Port = Right(Buffer,Len(Buffer)-StrPos)
; Ersetzt die Kommata durch Punkte für korrekte IP Angabe
IP$ = Replace(IP$,",",".")
; Ermittelt die korrekte Port Nummer
Buffer = Port
StrPos = Instr(Buffer,",",1)
Port1$ = Left(Buffer,StrPos-1)
Port2$ = Right(Buffer,Len(Buffer)-StrPos)
Port = Int(Port1)*256+Int(Port2)
Print "Verbinde nach "+IP+" mit Port "+Port
Connection = OpenTCPStream(IP$,Port)
Return Connection
Else
; Konnte keine Verbindung aufbauen
Return 0
EndIf
End Function

Function FtpRename(FtpStream,OldName$,NewName$)
; ... Wird später implementiert
End Function

Function FtpDelete(FtpStream,ServerFile$)
; ... Wird später implementiert
End Function

Function FtpMakeDir(FtpStream,ServerDir$)
; ... Wird später implementiert
End Function

Function FtpRemoveDir(FtpStream,ServerDir$)
; ... Wird später implementiert
End Function

; Funktion : Ftp Cur Directory
; Ermittelt das aktuelle Verzeichnis und gibt es als String zurück
; Bei einem Fehler wird ein leerer String zurückgegeben

Function FtpCurDirectory$(FtpStream)
WriteLine FtpStream,"PWD"
Return ReadLine FtpStream
End Function
[/code:1:1a117014b8]
===
von ???
JA,

wenn das keine SUPER-Sache ist, heiße ich nicht mehr Toni.

Mit diesem Prog ist eigentlich mein ONLINE-HIGH-SCORE-PROBLEM gelöst !

Danke

Toni
===
von ???
Super Sammlung!

Ich komme damit aber leider nicht weiter.
Wenn ich beispielsweise folgendes ausführe, kommt eine Fehlermeldung "Stream does not exists". Woran liegt das ?:

[code:1:d35af86dcc];Server anwählen
datei=FtpConnect("ftp://ftp.bytecobra.de","meinbenutzername","meinkennwort")

Delay 2000

;Daten übertragen
FtpUpload (datei,"test.txt","test.txt")
;Serververbindung beenden
FtpDisconnect(datei)[/code:1:d35af86dcc]



test.txt befindet sich im selben Verzeichnis, wie dieses Programm.
Anstatt "meinbenutzername" und "meinkennwort" gebe ich natürlich die richtigen Daten ein.





Gruß,

Dirk Knoop[code:1:d35af86dcc]Function FtpCurDirectory$(FtpStream)
WriteLine FtpStream,"PWD"
Return ReadLine FtpStream
End Function [/code:1:d35af86dcc]

habe ich gelöscht, da jesesmal angezeigt wird: "function ftpstream not found".
===
von ???
Hmm, genau dasselbe macht meine FTP-DLL ( www.makegame.de/btools ) ... aber die funktioniert ;)
===
von ???
Ich habe den Fehler gefunden, jetzt funktioniert es.
Ich darf das ftp://ftp. nicht mitaufführen.

Dirk Knoop



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: