Nochmal Problem mit schicken einer Datei

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

mabox

Betreff: Nochmal Problem mit schicken einer Datei

BeitragMo, Apr 07, 2008 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mir ist es jetzt schon peinlich, dass ich nochmal frag (einige erinnern sich bestimmt^^). Ich habe ein kleines Projekt wieder aufgenommen, dabei handelt es sich um (simples) schicken einer Datei von einem Rechner auf einen anderen.

Jetzt ist das Problem noch, dass nur ein Prozent der Datei geschickt wird (also auf dem anderen Rechner ankommt) Theoretisch sollte in jedem schleifendurchlauf ein Prozent geschickt werden, bis die Datei vollständig angekommen ist.
Ich habe den Fehler schon oft und lange gesucht aber finde ihn einfach nicht. Könnt ihr mir nochmal helfen?

ServerCode: [AUSKLAPPEN]
;Server
Graphics 640,480,16,2
AppTitle "Server"

hintagrund = LoadImage("mausoft_global_klein.png")
MaskImage hintagrund ,255,0,255

.datei_laden

;das hier ist unwichtig (da ist der Fehler ganz sicher nicht)
;=========================================================================
ClsColor 204,204,204
Cls
DrawImage hintagrund ,0,0
Color 0,0,0
Text 10,200, "zieh eine Datei hier rein..."
WindowAcceptFiles( SystemProperty( "AppHWND" ), True )

Local datei_zum_senden$
Local result$
While datei_zum_senden$ = ""
   result = ReturnAcceptedFiles( )
   If( results <> datei_zum_senden$ And result <> "" )
      datei_zum_senden$ = result
   EndIf
   Delay 10
Wend
WindowAcceptFiles( SystemProperty( "AppHWND" ), False )
;=========================================================================

Repeat
   zaehlen = zaehlen+1
   DateiName$ = Right$(datei_zum_senden$,zaehlen)
Until Left (DateiName$, 1) = "\"

DateiName$=Mid(DateiName$, 2)
Datei1=OpenFile(datei_zum_senden$)
If Datei1 = 0 Then Goto datei_laden
Dateigroesse1=FileSize(datei_zum_senden$)
Cls
DrawImage hintagrund ,0,0
Text 10,200, "Pfad: " + datei_zum_senden$
Text 10,215, "Dateigröße: "+DateiName$+" "+Dateigroesse1
Speicherfeld1 = CreateBank(Dateigroesse1)
ein_prozent_der_datei = Dateigroesse1/100
Text 10,230, "ein Prozent der Datei :" + ein_prozent_der_datei

server=CreateTCPServer(21)
a=1
Repeat
   senden=AcceptTCPStream(server)
   If senden Then
      If a=1 Then
         WriteLine(senden, DateiName$)
         WriteLine(senden, Dateigroesse1)
         a=0
      EndIf
      
      Byte=ReadBytes (Speicherfeld1, Datei1, b, ein_prozent_der_datei)
      gespeichert=WriteBytes (Speicherfeld1, senden, g, Byte)
      b = b + Byte
      g = g + gespeichert
      
   EndIf
Until g >= Dateigroesse1

Text 10,245, "Datei erfolgreich gesendet"   
WaitKey()
Goto datei_laden


ClientCode: [AUSKLAPPEN]
;Client
Graphics 640,480,16,2
AppTitle "Client"

ClsColor 204,204,204
Color 0,0,0

.start
Cls
ip$ = "***.***.***.***"
;ip$ = Input ("IP eingeben: ")
tcp = OpenTCPStream(ip$, 21)

If tcp<>0 Then
   Text 10,10, "Verbindung erfolgreich hergestellt."
Else
   Text 10,10, "Verbindung konnte nicht hergestellt werden."
   Text 10,25, "drück eine Taste um es erneut zu versuchen."
   WaitKey()
   Goto start
   End
End If

Datei_zum_bekommen$=ReadLine(tcp)
Datei2=WriteFile(Datei_zum_bekommen$+"1")
Dateigroesse2#=ReadLine(tcp)
Speicherfeld2 = CreateBank(Dateigroesse2#)
ein_prozent_der_datei1 = Dateigroesse2#/100

Cls
Text 10,10, Datei_zum_bekommen$+" runterladen von "+ip$
Text 10,25, "Größe: " + Dateigroesse2#+ " Bytes"

Repeat
   Byte=ReadBytes (Speicherfeld2, tcp, b1, ein_prozent_der_datei1)
   gesp=WriteBytes (Speicherfeld2, Datei2, g1, Byte)
   b1 = b1 + Byte
   g1 = g1 + gesp
   prozent#=b1/Dateigroesse2#
   prozent#=prozent#*100
   AppTitle prozent#+"%"
Until g1 >= Dateigroesse2#

Text 10,40, "Datei angekommen"
WaitKey()
Goto start
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragDi, Apr 08, 2008 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine das TCP Protokoll zerlegt das eh in Pakete .
Mir ist ein Rätsel wo der Sinn von dem was du machst ist .
Ansonsten kommentiere jede Zeile das du siehst und verstehst was du machst .

mabox

BeitragDi, Apr 08, 2008 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, dass ich weis was ich mache und ich zerlege die Datei in Stücke damit man sieht wieviel % von der Datei schon angekommen sind. Wie würdest du das denn sonst machen?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

sdjh

BeitragDi, Apr 08, 2008 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mir den quelltext nicht durchgelesen, aber ich hoffe das hilft:
Code: [AUSKLAPPEN]
max=filesize(file$)
anz=0
repeat
writebyte tcp,readbyte(file)
anz=anz+1
proz#=anz*100/max
print "Geladen: "+proz#
until eof(file)

mabox

BeitragDi, Apr 08, 2008 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das hilft nicht, Ich denke das selbe steht auch (ganz bisschen anders) in meinem Code.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Silver_Knee

BeitragDi, Apr 08, 2008 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
gespeichert - Lass dir den wert mal anzeigen oder setz vor die Schleife ein stop und geh mal schritt für schrit mit und kuk was alle Variablen für werte haben...

mabox

BeitragDi, Apr 08, 2008 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab jetzt die Variablen mal angeschaut. g,b,Byte und gespeichert haben alle immer den gleichen Wert (ein Prozent der Datei).
Das sagt nichts.
Aber ich hab jetzt mal die "senden" variable abgecheckt und bin auf einen möglichen Fehler gekommen:
stimmt das erste oder das zweite?
bis jetzt ist das erste in meinem Code...

Code: [AUSKLAPPEN]
Repeat
   senden=AcceptTCPStream(server)
   If senden Then
   ;lese dies und schick jenes      
   EndIf
Until g >= Dateigroesse1


Code: [AUSKLAPPEN]
Repeat
   senden=AcceptTCPStream(server)
   ;lese dies und schick jenes      
Until g >= Dateigroesse1
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragDi, Apr 08, 2008 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie es ein Webserver auch macht .
Es gibt einen Header der die Daten beschreibt und
einen Datenblock .

Dein Server schickst also alles in ein Ausgangpuffer .
Der Client ließt sich den ersten Block durch und weiß was ihn erwartet .
Die Trennung zwischen Header & Daten ist ein bischen blöd aber
das haben andere auch hin bekommen .

mabox

BeitragDi, Apr 08, 2008 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
so ist das doch in meinem Programm....zuerst wird der Dateiname und die Größe gesendet und dann dei Datei.
Oder meintest du etwas anderes?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragDi, Apr 08, 2008 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh,haste recht, aber das auslesen sieht noch komisch aus .

Bei Server würde ich das zuerst so machen

Code: [AUSKLAPPEN]

senden=AcceptTCPStream(server)
   If senden Then
      If a=1 Then
         WriteLine(senden, DateiName$)
         WriteLine(senden, Dateigroesse1)
         a=0
      EndIf
      Datei raus jagen als ganzes
      warten auf Antwort und dann "senden" schließen

mabox

BeitragDi, Apr 08, 2008 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke schonmal,
Aber ich versteh nicht ganz wie du das meinst.

Ich soll die Schleife weglassen und dann dei beiden Zeilen zum Datei auslesen und datei verschicken so ändern...
Code: [AUSKLAPPEN]
Byte=ReadBytes (Speicherfeld1, Datei1, 0, Dateigroesse1)
gespeichert=WriteBytes (Speicherfeld1, senden, 0, Dateigroesse1)

und was meinst du jetzt mit Zitat:
warten auf Antwort und dann "senden" schließen
???

soll das Client Programm z.B. sagen "Datei angekommen" und dann wird die Verbindung getrennt oder wie?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragDi, Apr 08, 2008 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja war so gedacht .
Bin mir nicht sicher was passiert wenn du den Stream einfach zu machst,
könnte mir denken das drüben nix mehr an kommt .

mabox

BeitragMo, Apr 14, 2008 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok ich hab das jetzt so geändert wie du es gesagt hast und es geht...
ABER ich kann nur Dateien schicken die kleiner als 1 MB sind.
Wenn die Datei größer ist steht beim client dran, dass sie 0,0 MB hat. Vielleicht wird nur die Dateigröße falsch gesendet oder falsch empfangen.
Da find ich den Fehler nicht. findet ihn jemand von euch?

meine aktuellen Codes...

ServerCode: [AUSKLAPPEN]
;Server
Graphics 640,480,16,2
AppTitle "Server"

.datei_laden

;das hier ist unwichtig (da ist der Fehler ganz sicher nicht)
;=========================================================================
ClsColor 204,204,204
Cls
Color 0,0,0
Text 10,200, "zieh eine Datei hier rein..."
WindowAcceptFiles( SystemProperty( "AppHWND" ), True )

Local datei_zum_senden$
Local result$
While datei_zum_senden$ = ""
   result = ReturnAcceptedFiles( )
   If( results <> datei_zum_senden$ And result <> "" )
      datei_zum_senden$ = result
   EndIf
   Delay 10
Wend
WindowAcceptFiles( SystemProperty( "AppHWND" ), False )
;=========================================================================

Repeat
   zaehlen = zaehlen+1
   DateiName$ = Right$(datei_zum_senden$,zaehlen)
Until Left (DateiName$, 1) = "\"

DateiName$=Mid(DateiName$, 2)
Datei1=OpenFile(datei_zum_senden$)
If Datei1 = 0 Then Goto datei_laden
Dateigroesse1#=FileSize(datei_zum_senden$)
Cls
Text 10,200, "Pfad: " + datei_zum_senden$


Speicherfeld1 = CreateBank(Dateigroesse1#)

server=CreateTCPServer(21)

Repeat
   senden=AcceptTCPStream(server)
   If senden Then
      ankommend$ = ReadString(senden)
      Text 10,230,ankommend$
      WriteLine(senden, DateiName$)
      WriteLine(senden, Dateigroesse1#)
      Byte=ReadBytes (Speicherfeld1, Datei1, 0, Dateigroesse1#)
      gespeichert=WriteBytes (Speicherfeld1, senden, 0, Dateigroesse1#)
      Text 10,260, "Datei erfolgreich gesendet"   
      CloseTCPServer server
      CloseFile Datei1
      WaitKey()
      End
   EndIf
Forever


ClientCode: [AUSKLAPPEN]
;Client
Graphics 640,480,16,2
AppTitle "Client"

hintagrund = LoadImage("mausoft_global_klein.png")
MaskImage hintagrund ,255,0,255

.start
ClsColor 204,204,204
Cls
DrawImage hintagrund ,0,0
Color 0,0,0
Locate 10,200
ip$ = Input ("IP eingeben: ")
Cls
DrawImage hintagrund ,0,0
tcp = OpenTCPStream(ip$, 21)

If tcp<>0 Then
   Text 10,200, "Verbindung erfolgreich hergestellt."
Else
   Text 10,200, "Verbindung konnte nicht hergestellt werden."
   Text 10,215, "drück eine Taste um es erneut zu versuchen."
   WaitKey()
   Goto start
   End
End If
WriteString tcp,"Client hat sich eingeklinkt..."

Datei_zum_bekommen$=ReadLine(tcp)
Dateigroesse2#=ReadLine(tcp)
Datei2=WriteFile(Datei_zum_bekommen$)
Speicherfeld2 = CreateBank(Dateigroesse2#)

Text 10,215, Datei_zum_bekommen$+" runterladen von "+ip$
Text 10,230, "Größe: " + Dateigroesse2#+ " Bytes"

Byte=ReadBytes (Speicherfeld2, tcp, 0, Dateigroesse2#)
gesp=WriteBytes (Speicherfeld2, Datei2, 0, Dateigroesse2#)

Text 10,260, "Datei angekommen"
CloseTCPStream tcp
CloseFile Datei2
WaitKey()
End
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragMo, Apr 14, 2008 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
War # nicht für ne Fließkommazahl ?
Nimm doch erstmal den String entgegen und gib ihn mit DebugLog aus .

mabox

BeitragMo, Apr 14, 2008 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
was ist DebugLog?
der string kommt richtig an.
Das mit dem # hab ich jetzt mal in einen Int geändert, ich probier gleich mal aus obs geht.

~EDIT: Also es geht nicht, alles bleibt genau wie vorher...
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragMo, Apr 14, 2008 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
DebugLog gibt eine Meldung im Debug Fenster aus .

Text 10,230, "Größe: " + str(Dateigroesse2) + " Bytes"

hier müßte erstmal das richtige ankommen weil du es ja so geschickt hast .

Jolinah

BeitragDi, Apr 15, 2008 0:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht ob ReadBytes() und WriteBytes() intern schon buffern, aber ich finde den ersten Ansatz mit dem aufgeteilten schreiben/lesen besser. Das hat den Vorteil, dass auch bei extrem grossen Dateien nie mehr Arbeitsspeicher verbraucht wird, als die verwendete Buffer-Grösse. Da ich kein BPlus hab, konnte ich den Code bei mir nicht richtig testen, aber hier mal mein Ansatz, wie ich sowas lösen würde:

Code: [AUSKLAPPEN]
;Server
Graphics 640, 480, 0, 2
SetBuffer BackBuffer()


;Client-Objekt definieren
Type Client
   Field stream
   Field gesendet
End Type


;Datei öffnen
filename$ = "indigo.exe"
file = ReadFile(filename)
size = FileSize(filename)


;Server starten
tcp = CreateTCPServer(50667)

buf_size = 65536 ;Buffer-Grösse 64kb
buf = CreateBank(buf_size)


Repeat
Cls

   ;Client annehmen
   c = AcceptTCPStream(tcp)
   If c <> 0 Then
      ;Neues Client-Objekt erstellen
      client.Client = New Client
      
      ;Den stream speichern
      client\stream = c
      
      ;Dem Client mitteilen welche Datei er erhält
      WriteString(client\stream, filename)
      
      ;Und die Grösse der Datei
      WriteInt(client\stream, size)
   EndIf
   
   
   
   ;Alle Clients durchgehen
   For client.Client = Each Client
   
      ;In der Datei die richtige Position suchen
      SeekFile(file, client\gesendet)
      
      ;Von dieser Position aus, buf_size bytes lesen
      ;gelesen gibt an, wie viele bytes wirklich gelesen wurden
      gelesen = ReadBytes(buf, file, 0, buf_size)

      ;Wenn was gelesen werden konnte...      
      If gelesen > 0 Then
      
         ;Dem Client die gelesenen bytes senden
         ;gesendet gibt an, wie viele bytes wirklich gesendet wurden
         gesendet = WriteBytes(buf, client\stream, 0, gelesen)
      
         ;Wenn was gesendet werden konnte
         If gesendet > 0 Then
      
            ;Beim Client-Objekt die Anzahl gesendeter Bytes um den
            ;richtigen Betrag erhöhen
            client\gesendet = client\gesendet + gesendet
      
      
            ;Wenn die Dateigrösse erreicht wurde...
            If client\gesendet = size Then
               ;Verbindung mit dem Client trennen
               CloseTCPStream(client\stream)
         
               ;Und Client-Objekt löschen
               Delete client
            EndIf
         
         Else
            ;Dem Client konnte nichts gesendet werden
            ;Verbindung trennen
            CloseTCPStream(client\stream)
            Delete client         
         EndIf
      
      Else
         ;Von der Datei konnte nichts gelesen werden
         ;Verbindung trennen
         CloseTCPStream(client\stream)
         Delete client
      EndIf
      
      
      ;Nächster Client...
   Next
   
   
Flip
Until KeyHit(1)

;Bufferspeicher freigeben
FreeBank(buf)

;Server beenden
CloseTCPServer(tcp)

;Datei schliessen
CloseFile(file)

End



Code: [AUSKLAPPEN]
;Client
Graphics 640, 480, 0, 2
SetBuffer BackBuffer()


;Verbindung mit dem Server herstellen
tcp = OpenTCPStream("localhost", 50667)
If tcp = 0 Then
   Print "Verbindung konnte nicht hergestellt werden."
   WaitKey
   End
EndIf


;Dateiname und Grösse lesen
filename$ = ReadString(tcp)
size = ReadInt(tcp)

;Dateistream (Dateien in Ordner download laden)
file = WriteFile("download/" + filename)

buf_size = 65536  ;Buffergrösse 64kb
buf = CreateBank(buf_size)

;Anzahl gelesene Bytes
total = 0


;Zur Anzeige eines Ladebalkens
balken_x = 20
balken_y = 20
balken_breite = 600
balken_hoehe = 20
prozent# = 0.0

;Variable zum Beenden des Programms
quit = False
quit_message$ = ""

Repeat
Cls

   ;Wenn Daten gelesen werden können und die Datei noch nicht komplett ist
   If ReadAvail(tcp) > 0 And total < size Then
   
      ;buf_size Bytes vom Stream lesen
      ;gelesen gibt an, wie viele Bytes wirklich gelesen wurden
      gelesen = ReadBytes(buf, tcp, 0, buf_size)
      
      If gelesen > 0 Then

         ;Die gelesenen Bytes erhöhen
         total = total + gelesen
         
         ;Prozent ausrechnen
         prozent = Float(total) / Float(size)

         ;Die gelesenen Bytes in die Datei schreiben
         ;geschrieben gibt an, wie viele Bytes wirklich geschrieben wurden
         geschrieben = WriteBytes(buf, file, 0, gelesen)
         
         If geschrieben < 1 Then
            
            ;Es konnte nichts in die Datei geschrieben werden
            quit = True
            quit_message$ = "Fehler beim Schreiben in die Datei. Datei ist nicht komplett."
            
         EndIf
         
      Else
      
         ;Vom Server konnte nichts gelesen werden, Verbindungsunterbruch etc.
         quit = True
         quit_message$ = "Fehler beim Lesen vom Server. Datei ist nicht komplett."
         
      EndIf
         
   EndIf
   
   ;Wenn die Dateigrösse erreicht wurde...
   If total = size Then
      quit = True
      quit_message = "Die Datei wurde erfolgreich vom Server geladen."
   EndIf
   
   ;Rahmen zeichnen
   Color 255, 255, 255
   Rect balken_x, balken_y, balken_breite, balken_hoehe, False
   
   ;Balken zeichnen
   Color 255, 0, 0
   Rect balken_x + 1, balken_y + 1, prozent * (balken_breite - 2), balken_hoehe - 2


Flip
Until quit = True

;Bufferspeicher freigeben
FreeBank(buf)

;Verbindung schliessen
CloseTCPStream(tcp)

;Datei schliessen
CloseFile(file)

;Nachricht vor dem Beenden des Programms ausgeben
If quit_message <> "" Then
   Color 255,255,255
   Print quit_message
   WaitKey
EndIf

End


Der Server beendet sich hier nicht nach jedem Schreiben einer Datei (aber vielleicht war es ja so gewollt). Zudem kann der Server gleichzeitig mehrere Clients bedienen Wink
  • Zuletzt bearbeitet von Jolinah am Di, Apr 15, 2008 19:08, insgesamt einmal bearbeitet

Markus2

BeitragDi, Apr 15, 2008 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jolinah,mabox
Beim Client ließt du dann aber mehr aus wie evtl. angekommen ist .
Und was passiert wenn das Netzwerk unterbrochen wird ,
Endlosschleife ?
Jedesmal einen Puffer zu erzeugen und wieder entfernen ist auch nicht Klug .

@mabox
das der Client die Datei in einem Stück holt davon war nicht die Rede Wink

Siehe ReadAvail
Code: [AUSKLAPPEN]

; OpenTCPStream/CloseTCPStream/ReadAvail Example

Print "Connecting..."
tcp=OpenTCPStream( "www.blitzbasement.com",80 )

If Not tcp Print "Failed.":WaitKey:End

Print "Connected! Sending request..."

WriteLine tcp,"GET http://www.blitzbasement.com HTTP/1.0"
WriteLine tcp,Chr$(10)

If Eof(tcp) Print "Failed.":WaitKey:End

Print "Request sent! Waiting for reply..."

While Not Eof(tcp)
Print ReadLine$( tcp )
Print "Bytes available:" + ReadAvail(tcp)
Wend

If Eof(tcp)=1 Then Print "Success!" Else Print "Error!"

CloseTCPStream tcp

WaitKey

mabox

BeitragDi, Apr 15, 2008 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Markus2
Also der Debuglog gibt das richtige aus.
Also ich soll beim Server die Datei als ganzes wegschicken und beim client aber nur einzelne Stücke annehmen? was soll das bringen? Was bringt das ReadAvail überhaupt in dieser Situation? (Ich hab mir das Beispiel angeschaut und auch die OH, aber ich versteh nicht für was ich das hier brauchen könnte)

@Jolinah
Vielen Dank, aber wenn ich die Datei in solche Stücke zerschneide wirds doch wieder langsamer oder?
Ich hab mich jetzt eigentlich entschieden es nicht mit dieser Version zu machen.....höchstens wenn ich mal ganz große Dateien verschicken will.


Also komischerweise geht es jetzt manchmal mit dem verschicken der Datei, (ich hab den Code nicht geändert) aber man kann die angekommene Datei nicht öffnen (sie hat aber genau die gleiche größe wie beim Server).
Mir ist das alles recht rätselhaft.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragDi, Apr 15, 2008 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Senden gibt es schon einen Ausgangspuffer den man sofort füllen kann
wo es halt kein Sinn macht den in Häpchen zu füllen .
Beim Empfangen bekommst du immer nur kleine Pakete wo
es keinen Sinn macht direkt xxx Megabyte Puffer zu reservieren
da du ja auch direkt in eine Datei schreiben möchtest .

Wenn du z.B. nur 100 Byte bekommst (z.B. als Rest) solltest du keine Anweisung geben
4096 Byte (als Puffer) auszulesen .

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group