Dateien versenden über TCP

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Progger93

Betreff: Dateien versenden über TCP

BeitragSa, Nov 15, 2008 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich hab folgendes Problem

Sende Funktion:
Code: [AUSKLAPPEN]
Function sendfile(partner$)
   send_file=1
   Local datei$=DLLGetOpenFileName$("Please Select File To Load","C:\",sAFilter$,OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST)
   If datei$ <>0 Then
      Local dat=ReadFile(datei$)
      Local file_size#=FileSize(datei$)
      Local rest=file_size Mod 50
      ResizeBank bank,file_size
      ReadBytes (bank,dat,0,file_size)
      WriteByte tcp,3
      WriteString tcp,partner
      WriteInt tcp,file_size
      Local datei_name$=ConvertFoldernameToFilename$(datei$)
      WriteString tcp,datei_name$
      refreshtimer=MilliSecs()
      For I#=0 To ((file_size-rest)/50)-1
         WriteBytes (bank,tcp,I*50,50)
         send_progress=I*50/file_size
         If refreshtimer-MilliSecs()>100 Then
            refreshtimer=MilliSecs()
            draw()
         EndIf
      Next
      WriteBytes(bank,tcp,file_size-rest,rest)
      CloseFile dat
   EndIf
   send_file=0
End Function


Weiterleitfunktion des Servers:
Code: [AUSKLAPPEN]
Case 3
                  partner$=ReadString(c\stream)
                  size=ReadInt(c\stream)
                  rest=size Mod 50
                  fname$=ReadString(c\stream)
                  
                  For p.client=Each client
                     If p\name$=partner$ Then
                        WriteByte p\stream,3
                        WriteInt p\stream,size
                        WriteString p\stream,fname$
                        
                        Color 255,255,0
                        Print c\name$+" sendet ["+fname$+"] an "+ p\name$
                        Color 0,0,0
                        
                        ResizeBank(bank,size)
                        
                        
                        For i=0 To ((size-rest)/50)-1
                           ReadBytes(bank,c\stream,i*50,50)
                           WriteBytes(bank,p\stream,i*50,50)
                        Next
                        
                        ;Rest
                        ReadBytes(bank,c\stream,size-rest,rest)
                        WriteBytes(bank,p\stream,size-rest,rest)
                        
                        
                     EndIf
                  Next

Empfangfunktion:
Code: [AUSKLAPPEN]

            Case 3
               Local file_size=ReadInt(tcp)
               Local rest=file_size Mod 50
               Local file$=ReadString(tcp)
               Local datei=WriteFile("recieved/"+file$)
               ResizeBank(bank,file_size)
               For I=0 To ((file_size-rest)/50)-1
                  ReadBytes (bank,tcp,I*50,50)
                  WriteBytes(bank,datei,I*50,50)
               Next
               WriteBytes(bank,datei,file_size-rest,rest)
               CloseFile datei


Die Datei wird zwar schnell übertragen und die gleiche Größe wie die Ausgangsdatei, allerdings lassen sich z.B. Bilddateien nicht öffnen("Die Datei ist beschädigt")
Wenn man sich die Datei grob im Editor ansieht merkt man dass das Ende der Datei komplett anders ist.

Aus Code: [AUSKLAPPEN]
;~IDEal Editor Parameters:
;~C#Blitz3D


wird
Code: [AUSKLAPPEN]

ØØØ*haql,´’\o|ßQ|%ÝxÏÙ…Ã70øñÁÿØÖÃçyòÄñ


Was kann ich tun?

MFG Progger93
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT

TimBo

BeitragSo, Nov 16, 2008 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

habe deinen Code vom Senden nicht ganz gecheckt, aber ich würde das so machen:
der leser macht
Code: [AUSKLAPPEN]
handle=readline("datei")
while not eof handle
writebyte sende_stream, readbyte(handle)
wend
closetcpstream sende_stream


und der empfänger
Code: [AUSKLAPPEN]

while not eof empfangs_stream
writebyte datei,readbyte empfangs_stream
wend
closetcpstream empfangs_stream


das ist kein wirklicher Code, soll nur das Prinzip erklären, dass man aus einer Datei jeden Byte einzeln auslesen schicken und speichern kann, glaube ich.
So wäre ich die Sache angegangen.

Viele Grüße
TimBo[/code]
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Progger93

BeitragSo, Nov 16, 2008 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja so hab ich das am anfang auch gemacht allerdings war das sehr langsam!
Dann hab ichs mit Readbytes versucht und jetzt gehts nichmehr...
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group