FTP Transfer wird nicht abgeschlossen ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Raptor

Betreff: FTP Transfer wird nicht abgeschlossen ?

BeitragDo, Apr 12, 2007 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,


zuerst der Code für die DIR funktion:
Code: [AUSKLAPPEN]

Function nDir(FtpStream)
; Lokale Variablen
Local Result$ ; Rückgabe vom Server
Local DataStream ; Der Daten Stream

; Fragt nach einer neuen Daten Verbindung
WriteLine FtpStream,"PASV"
Print ReadLine(FtpStream)

DataStream = FtpDataConnect(Result) ;-- Erstelle zweite Verbindung

; Bereitet den Server auf das Empfangen vor
WriteLine FtpStream,"NLST"

Print ReadLine(FtpStream) ;=150

While Not Eof(DataStream)
Print ReadLine(DataStream) ;=Ausgabe der Dateien OK
Wend

; Gibt den Datenstrom wieder frei
CloseTCPStream DataStream
End Function



Jetzt noch der Code für die Zweite Verbindung

Code: [AUSKLAPPEN]

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)
Ausgabe("Verbinde nach "+IP+" mit Port "+Port)
Connection = OpenTCPStream(IP$,Port)
Return Connection
Else
; Konnte keine Verbindung aufbauen
Return 0
EndIf

End Function


Wenn ich die Function nDir jetzt aufrufe klappt alles soweit, er gibt mit auch die auf dem Server befindlichen Daten aus. Es kommt aber kein 226 Transfer complete !

Ebenfalls kann ich die Function nicht 2 mal hintereinander ausführen ???
Sieht hier jemand nen Fehler ?

Gruß Raptor

Mathias-Kwiatkowski

BeitragDo, Apr 12, 2007 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst die funktion nicht 2 mal ausführen weil blitzbasic im tcp modus nur senden kann und nach dem senden noch alles empfangen kann, also was ich sagen will ist du kannst nicht hingehen und sowas machen

writeline stream,"lol"
print readline(stream)
writeline stream,"lol2"
print readline(stream)

das geht nicht weil man kann nur erst alles senden und dann alles empfangen, und danach muss der stream geschlossen werden, ansonsten macht es bb automatiosch, und auf dem ftp server bist du zwar noch eingeloggt, aber ein toter besucher ^^

du musst also wieder die tcp verbindung öffnen!



ansonsten benutz blitzmax da geht es besser, da kann man senden & empfangen usw.

BtbN

BeitragDo, Apr 12, 2007 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, natürlich kann BB senden und empfangen, ich erinnere mich noch recht gut, dass eines meiner uralten spielchen das recht gut konnte.

Mathias-Kwiatkowski

BeitragDo, Apr 12, 2007 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
kann senden und empfangen aber NICHT HINTEREINANDER, man muss den stream dann neu öffnen!!!

BtbN

BeitragDo, Apr 12, 2007 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, nein, eigentlich nicht. Siehe HTTP, da sendet man auch einen request und empfängt dann die antwort. Oder IRC, da sendet und empfängt man dauernd.

Mathias-Kwiatkowski

BeitragDo, Apr 12, 2007 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Und OB TCP den Stream Kappt , moment das haben zich leute bestätigt, werde etwas suchen müssen! da bist du voll im unrecht!
 

Raptor

BeitragDo, Apr 12, 2007 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, über die Function FtpDataConnect(Result) wird eine Zweite Verbindung hergestellt. Über diese Verbindung werden dann die Daten übermittelt.
Soweit funktioniert das auch. Die Daten werden übergeben. Anschließend wird diese Zweite Verbindung durch CloseTCPStream DataStream wieder geschlossen.

Jetzt müsste es doch möglich sein wieder eine neue Verbindung aufzubauen, wieder über die Function. Irgendwo in dem Code befindet sich ein Fehler. Ob die Zweite Verbindung nicht richtig geschlossen wird ? Immerhin kommt beim Auslesen auch keine Transfer Complete Nachricht.

Beim Download das selbe. Pro Datei die Function neu aufrufen. Functioniert auch nur bei einer Datei

Mathias-Kwiatkowski

BeitragDo, Apr 12, 2007 23:16
Antworten mit Zitat
Benutzer-Profile anzeigen
ich seh mir dein code morgen in ruhe an, ich finde den fehler schon noch ^^ hab selber mal ftp client und nen chat in tcp & udp & via mysql programmiert.

weil ich arbeiten muss morgen früh

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group