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 |