Downloaden

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

regaa

Betreff: Downloaden

BeitragDo, Feb 12, 2004 1:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es mit Blitz möglich, also z.B. (Ich habs noch net versucht), wenn ich n tcp stream öffne, also auf einem zip verweise oder so, ist es dann möglich durch readline oder readbyte oder wie auch immer, am ende zu einer gültigen checksumme zu kommen, also zu einem erfolgreichem download?

PS: Ich weiß ist ein bissel spät :p

BigSnake

BeitragDo, Feb 12, 2004 2:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu mindestens mit einem FTP Server ist das möglich. Ich habe mal entsprechende Funktionen im alten Code Archiv gepostet.

Markus2

BeitragDo, Feb 12, 2004 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
TCP hat einen Header den man auswerten sollte wo z.B.
die Dateilänge drin steht und beim download muß man den
Header erkennen und weglassen wenn man die Datei speichern will .
Kenne ich so ...

Vieleicht kannste damit was anfangen ...

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

regaa

BeitragDo, Feb 12, 2004 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@markus2: Naja nicht direkt, also hmmm nö.. Sieht schon extrem kompliziert aus, aber ich schau mal im Script archiv nach, danke @all .

regaa

BeitragDo, Feb 12, 2004 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, finde deinen Code net Sad .

BigSnake

BeitragFr, Feb 13, 2004 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist der Code

Code: [AUSKLAPPEN]

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
[/quote]

regaa

BeitragSa, Feb 14, 2004 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, vielen Dank, genau sowas hab ich gebraucht. Surprised

regaa

BeitragSa, Feb 14, 2004 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hut ab, ziemlich genial, da steckt logik hinter. Ich würd dazu bestimmt Wochen brauchen.

bruZard

BeitragSa, Feb 14, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst es aber auch ganz einfach per DLL machen --> www.makegame.de/btools Wink
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

regaa

BeitragSa, Feb 14, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
In Blitz3D seh ich kein userlibs verz, also ich hab die demo , ist das bei der vollversion anders?
 

OJay

BeitragSa, Feb 14, 2004 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
bigsnake, gute lib...aber ich empfehle die folgendes tut: https://www.blitzforum.de/viewtopic.php?t=1261 Smile


ich war mal so frei, den code in ein lesbares format zu bringen (kannst ihn ja von einem mod in deinen beitrag editieren lassen):
Code: [AUSKLAPPEN]
;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)

;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

; (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
;///////////////////////////////////////////////////////////////7
Function FtpCurDirectory$(FtpStream)

   WriteLine FtpStream,"PWD"
   Return ReadLine FtpStream

End Function

regaa

BeitragSa, Feb 14, 2004 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Bekomm immer fehlercode 12003 bei btgetftp Sad . WO kann man nachsehen was das bedeutet.

regaa

BeitragSo, Feb 15, 2004 3:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Alsoooo, ich hab herausgefunden, das die ganzen Codes zwar vom FTP Client wir z.B. smartftp ganz gut eingelesen werden, aber wenn ich es mit blitzbasic versuche geht das auch auf allen servern außer auf meinem, nutze redhat 7.3 + proftp 1.2.4 . Hat da jemand erfahrung mit, was man machen könnte, ob das an der Konfiguration des FTP Servers liegt, oder vielleicht doch am Apache.?? Wäre euch sehr dankbar.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group