% von empfangener Datei[gelöst] + Writebytes [nicht gelöst]
Übersicht

![]() |
maboxBetreff: % von empfangener Datei[gelöst] + Writebytes [nicht gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich sende mit einem Programm eine Datei an einen anderen PC, auf dem anderen PC soll angezeigt werden wieviel von der Datei schon angekommen ist. Das funktioniert leider nicht, hier ist dieser Teil aus dem Code.
Code: [AUSKLAPPEN] Repeat
Byte=ReadByte(tcp) a#=a#+1 prozent#=a#/Dateigroesse2# prozent#=prozent#*100 AppTitle prozent#+"%" WriteByte(Datei, Byte) Until a# = Dateigroesse2# Komischerweise wird oben in der Fensterleiste wo die Prozent Zahl angezeigt werden soll: "Infinity%"angezeigt. Woran liegt das? |
||
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 |
- Zuletzt bearbeitet von mabox am Di, Feb 19, 2008 19:12, insgesamt 2-mal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würd ja eh mal ReadLine durch Readbyte ersetzen, weil du ja auch Writebyte machst, und ReadLine gibt ein String aus.
Desweiteren verstehe ich nicht, dass prozent, a und Dateigroesse2 ein Float ist. Ich denk ma Integer tuns auch? |
||
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das mit den Byte statt Line war mein Fehler. Hab ich nicht aufgepasst, komischerweise gings trotzdem ![]() Das mit den Floats war schon so, das ist nämlich ein Beispielcode aus dem englischen Blitzforum, aber das ist ja eigentlich egal ob es Float oder Integer Werte sind oder? Edit: Mir fällt gerade noch ein, wenns kein Float ist, könnte es dann nicht sein das ein Paar Bits am ender der Datei fehlen? oder ist das ein Denkfehler? |
||
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
"a" und "Dateigröße" sollten unbedingt Integer sein sonst kann es sein, dass der Vergleich der Schleife nicht klappt. Da Du die Bytes zählst kann da nix fehlen (es kommen eh nur ganze Bytes an). | ||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok thx, ich kanns momentan nicht ausprobieren weil ich grad den anderen Rechner nicht hab, aber es wird schon klappen. | ||
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 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry wegen Doppelpost, Aber ich habs jetzt ausprobiert und hab noch nen anderen Fehler gefunden an dem es lag, die Floats hatten damit garnichts zu tun. Jetzt funktioniert das Senden von Dateien ganz gut aber leider extrem langsam. Ich schicke eine 1,27MB Datei in 90 Minuten!!!
könnt ihr mir noch einen Tipp geben was ich falsch mache? Server: Code: [AUSKLAPPEN] ;Server
Graphics 640,480,16,2 AppTitle "Server" .datei_laden datei_zum_senden$=Input("Datei: ") Datei1=OpenFile(datei_zum_senden$) If Datei1 = 0 Then Print "Datei fehlt":Goto datei_laden Dateigroesse1=FileSize(datei_zum_senden$) Print "Dateigröße: "+datei_zum_senden$+" "+Dateigroesse1 server=CreateTCPServer(21) a=1 Repeat senden=AcceptTCPStream(server) If senden Then If a=1 Then WriteLine(senden, datei_zum_senden$) WriteLine(senden, Dateigroesse1) a=0 EndIf While Not Eof (Datei1) byte=ReadByte(Datei1) WriteByte(senden, byte) Wend EndIf Forever Print "Datei erfolgreich gesendet" WaitKey() Client: Code: [AUSKLAPPEN] ;Client
Graphics 640,480,16,2 AppTitle "Client" ip$ = Input ("IP eingeben: ") tcp = OpenTCPStream(ip$, 21) If tcp<>0 Then Print "Verbindung erfolgreich hergestellt." Else Print "Verbindung konnte nicht hergestellt werden." WaitKey() End End If Datei_zum_bekommen$=ReadLine(tcp) Datei=WriteFile(Datei_zum_bekommen$) Dateigroesse2#=ReadLine(tcp) Print Datei_zum_bekommen$+" runterladen von "+ip$ Print "Größe: " + Dateigroesse2#+ " Bytes" Repeat Byte=ReadByte(tcp) a#=a#+1 prozent#=a#/Dateigroesse2# prozent#=prozent#*100 AppTitle prozent#+"%" WriteByte(Datei, Byte) Until a# >= Dateigroesse2# Print "Datei angekommen" WaitKey() |
||
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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann schick nich jedes Byte einzeln.
Schau dir mal ql:ReadBytes und ql:WriteBytes an. Achja, noch zum ursprünglichen Problem, auch wenn's nun gelöst ist: Das lag offensichtlich daran, dass "dateigroesse2" 0 war. Denn bei Float kommt gerne mal "Infinity", wenn man durch 0 teilt (auch wenn's falsch ist, NaN wäre wohl korrekter) |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke!
Richtig das das Ursprüngliche Problem war das "dateigroesse2" 0 war. Tut mir leid, dass ich extra gefragt hab. Code: [AUSKLAPPEN] Byte=READBYTES (Bank, Stream, Start, Anzahl) Bei Anzahl muss ich die Dateigröße welche mit FileSize ermittelt wurde angeben oder?
Noch ein Problem: Wenn ich es jetzt starte kommt die Meldung: "Offset out of range". Irgendwas mach ich mit den Befehlen ReadBytes und WriteBytes falsch. Ich weis aber nicht was. Hier mein aktueller Server: Code: [AUSKLAPPEN] ;Server
Graphics 640,480,16,2 AppTitle "Server" .datei_laden datei_zum_senden$=Input("Datei: ") Datei1=OpenFile(datei_zum_senden$) If Datei1 = 0 Then Print "Datei fehlt":Goto datei_laden Dateigroesse1=FileSize(datei_zum_senden$) Print "Dateigröße: "+datei_zum_senden$+" "+Dateigroesse1 Speicherfeld1 = CreateBank() server=CreateTCPServer(21) a=1 Repeat senden=AcceptTCPStream(server) If senden Then If a=1 Then WriteLine(senden, datei_zum_senden$) WriteLine(senden, Dateigroesse1) a=0 EndIf While Not Eof (Datei1) Byte=ReadBytes (Speicherfeld1, Datei1, 0, Dateigroesse1) Byte=WriteBytes (Speicherfeld1, senden, 0, Dateigroesse1) Wend EndIf Forever Print "Datei erfolgreich gesendet" WaitKey() Hier mein aktueller Client: Code: [AUSKLAPPEN] ;Client
Graphics 640,480,16,2 AppTitle "Client" ;ip$ = Input ("IP eingeben: ") tcp = OpenTCPStream("169.254.178.66", 21) Speicherfeld2 = CreateBank() If tcp<>0 Then Print "Verbindung erfolgreich hergestellt." Else Print "Verbindung konnte nicht hergestellt werden." WaitKey() End End If Datei_zum_bekommen$=ReadLine(tcp) Datei2=WriteFile(Datei_zum_bekommen$) Dateigroesse2#=ReadLine(tcp) Print Datei_zum_bekommen$+" runterladen von "+ip$ Print "Größe: " + Dateigroesse2#+ " Bytes" Repeat Byte=ReadBytes (Speicherfeld2, tcp, 0, Dateigroesse2) a#=a#+1 prozent#=a#/Dateigroesse2# prozent#=prozent#*100 AppTitle prozent#+"%" Byte=WriteBytes (Speicherfeld2, Datei2, 0, Dateigroesse2) Until a# >= Dateigroesse2# Print "Datei angekommen" WaitKey() |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du erstellst eine bank ohne eine Größenangabe. Ist OK, aber dann besitzt sie ja keine Größe. Dann willst du in diese 0 Byte große Bank Daten reinschieben. Wird nicht klappen. Also: Bank vergrößern.
Du brauchst übrigens nicht gleich die ganze Datei in eine Bank schieben (dann macht die Prozentangabe auch wenig Sinn, du hast dann entweder 0 oder 100 Prozent ![]() |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, Das heißt ich müsste dann z.B. beim Server hinschreiben: Code: [AUSKLAPPEN] Speicherfeld1 = CreateBank(Dateigroesse1)
Hip Teen hat Folgendes geschrieben: Du brauchst übrigens nicht gleich die ganze Datei in eine Bank schieben (dann macht die Prozentangabe auch wenig Sinn, du hast dann entweder 0 oder 100 Prozent Was meinst du damit?
![]() Wenn ich immer nur 10kb in einem Schleifendurchlauf schicke geht es ja wieder ganz langsam und das gerade will ich ja nicht. Code: [AUSKLAPPEN] Byte=WriteBytes (Speicherfeld2, Datei2, 0, Dateigroesse2) muss ich dann statt "Dateigroesse2", 10 hinschreiben?
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group