![]() |
illegale Zuwanderung von Bits
Ich bin am verzweifeln und zweifle an meinem Verstand!
Ich schicke also auf der einen Seite einen Buffer ab und lasse mir die gesendete Datenmenge in ein Textfeld ausgeben:
Code:
dann Empfange ich den Buffer auf der anderen Seite und lasse mir die Empfangenen Daten in ein Textfeld ausgeben:
gr.text := IntToStr(StrToInt(gr.text)+Socket.SendBuf(sBuffer[1],Length(sBuffer)));
Code:
Und siehe da, die Werte stimmen absolut nicht überein!!! Die empfangene Datenmenge ist so ca. bei 20% größer, als die gesendete. Stellt sich die Frage, ob die Bits bei Ihrer Vermehrung auf dem Weg durchs Netz Spaß hatten! Aber Spaß beiseite, ich bin jetzt absolut ratlos, ich habe jetzt 4 Stunden lang den Fehler in meinem Code gesucht und die Fehlerquelle immer weiter eingegrenzt.
gr.text := IntToStr(StrToInt(gr.text)+Socket.ReceiveLength);
Hat einer eine Ahunung, was die Ursache für dieses Problem sein könnte??? meinen Code gibts nochmal ausführlicher im anderen Thread ![]() PS: Sorry, ich denke der Thread gehört wohl eher unter IP/LAN, habs zu spät bemerkt :oops: |
Hallo evilboyz,
dank deines Codes hab ich jetzt mittlerweile alles außer einer Sache hinbekommen. Ich kann Dateien verschicken und alles, und die dateien sind nach dem verschicken auch noch genauso gross und funktionieren auch, allerdings kann ich den Stream, mit dem ich schicke nichtmehr freigeben, ich bekomme da jedesmal ne exception. Dein Qtextfehler liegt hier:
Code:
das ist beim Empfänger.
fsData := TFileStream.Create('datei\bindif.exe',fmOpenWrite);
sBuffer := StringOfChar(#00,fsData.Size); try // Dateiinhalt als String empfangen und in Datei schreiben sBuffer := Socket.ReceiveText; Undzwar hast du den Buffer auf die Größe von fsdate festgelegt, das ist falsch, der Buffer muss die grösse des socket.receivetext haben. Ich hoffe das hilft dir weiter. Gruß Jan |
Danke für den Tip, das mit Socket.ReceiveText habe ich, so glaube ich, auch schon ausprobiert. Ist aber auch egal, die neue Lösung funktioniert wunderbar und da noch keiner was dazu gesagt hat, nehme ich an, dass ich keine wesentlichen Dinge außer Acht gelassen habe.
Was Deine Exception betrifft, so kann ich Dir eine total korrekte Antwort geben: SendStream gibt den Stream nach dem Senden automatisch frei, wenn Du dann versuchst, ihn nochmal freizugeben, gibts ne Exception, da er ja dann nicht mehr existiert. Siehe dazu auch die Hilfe .... So, dann wünsch ich Dir noch ein schönes Wochenende und viel Spaß beim coden .. :coder: |
Neue Version?
Was hast du denn verändert, damit es klappt? bb Jan |
Ich hab doch den Stream letztendlich per ReceiveText in den Buffer geschrieben und nicht per ReceiveBuffer, das hat dann auch wunderbar funktioniert, obwohl es, jedenfalls habe ich das Gefühl, nicht ganz so die feine Art ist!
Aber ich glaube, ich habe Dir heute morgen auch den entsprechenden Code geschickt ... ??? |
Code:
Jetzt dämmert mir gerade erst, was Du eben versucht hast, mir zu sagen ... natürlich ist fsData.Size ein völliger Blödsinn an der Stelle!
fsData := TFileStream.Create('datei\bindif.exe',fmOpenWrite);
sBuffer := StringOfChar(#00,fsData.Size); try // Dateiinhalt als String empfangen und in Datei schreiben sBuffer := Socket.ReceiveText; Der Code funktioniert allerdings fehlerfrei, den Buffer muss ich auch erst initialisieren, aber ich glaube, ich hatte bei ReceiveLength eine Fehlermeldung ... muss das nochmal ausprobieren ... |
Hehe, ich hatte mir schon gedacht, dass du das nocht ganz verstanden hast, was ich dir geschrieben habe.
Also bei mir klappt jetzt alles einwandfrei, ich kann dateien senden und empfangen nach lust und Laune, und die Grösse ist dann korrekt und ausführen kann ich die Dateien dann auch noch, wenn also noch irgendwo ein Problem ist: einfach nur nachfragen! Gruß Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz