Bank & Dateien - simple frage, schwere antwort?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

alliswrong

Betreff: Bank & Dateien - simple frage, schwere antwort?

BeitragDi, Aug 04, 2009 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute,
ich möchte gerne wissen wie ich folgendes bewerkstellige:

Ich möchte eine Datei per TCP übertragen. Hierbei ist ReadByte und WriteByte zu langsam. Also habe ich mich nach einer Alternative umgesehen und gefunden Read/Writebytes.

Doch hierzu findet man im Forum (wenn man Writebytes oder Readbytes eingibt) nur zwei threads die mich nicht wirklich weiter bringen. Ich habe nun folgende funktion geschrieben:

Code: [AUSKLAPPEN]

Function sendfile(file$, cstream)
   fstream = ReadFile(file$)
   bank = CreateBank(1024)
   kb = FileSize(file$)

   If fstream <> 0 Then
      WriteByte cstream, CLIENT_TRANSFER
      WriteString cstream, file$
      WriteString cstream, kb

      For i = 0 To kb
         ReadBytes bank, fstream, 0, 1024
         WriteBytes bank, cstream, 0, 1024
      Next
      
      CloseFile fstream
   End If   
End Function


Bei diesem code kommt allerdings ein "offset out of range" zustande.
Weiterhin vermute ich, dass ich die ganze datei am stück verschicke weil ich die bank ja dementsprechend erzeuge. Mein ziel ist es aber, die datei in paketen zu verschicken (1000 oder 1024 bytes) und diese dann am anderen ende der welt wieder zusammenzusetzen.

Egal was ich mache, es klappt nicht. Nun sind die "Bankprofis" gefragt: Was mache ich falsch?
Danke euch.

[EDIT]
Nun werden daten übertragen, allerdings mehrfach!
Eine 1 kb große datei wird auf einmal über 40 kb
 

alliswrong

BeitragDi, Aug 04, 2009 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, ich war der lösung schon soooo nah und hab es nicht gesehen. für alle die das gleiche problem haben, hier der code:

SERVER:
file$ = Dateiname
cstream = stream zum client

Hinweis: Dem clienten wird "CLIENT_TRANSFER" übermittelt damit er weiß, dass daten kommen.
Ausserdem wird ihm der dateiname nochmal zurückgeschickt und die größe der datei. Transfer erfolgt in 1024 großen häppchen.
Code: [AUSKLAPPEN]

Function sendfile(file$, cstream)
   fstream = ReadFile(file$)
   bank = CreateBank(1024)
   kb = FileSize(file$)

   If fstream <> 0 Then
      WriteByte cstream, CLIENT_TRANSFER
      WriteString cstream, file$
      WriteString cstream, kb

      For i = 0 To kb Step 1024
         ReadBytes bank, fstream, 0, 1024
         WriteBytes bank, cstream, 0, 1024
      Next
      
      CloseFile fstream
   End If   
End Function



CLIENT:
Hinweis: stream ist die verbindung zum server (bei mir global)
Code: [AUSKLAPPEN]

Function saveFile()
   f = WriteFile(MilliSecs() + "_" + ReadString$(stream))
   bank = CreateBank(1024)
   kb = ReadString$(stream)
   
   For i = 0 To kb Step 1024
      ReadBytes bank, stream, 0, 1024
      WriteBytes bank, f, 0, 1024
   Next
   
   CloseFile f
End Function

hazumu-kun

BeitragDi, Aug 04, 2009 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Darf ich dir meine Pack-Engine Anbieten?
Damit wird FileTransfer recht einfach.

https://www.blitzforum.de/foru...hp?t=32092

Der Download Link ist allerdings tot.
Der Gesamte Code ist aber auch in der Codebox drinne.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group