Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Empfangener Buffer größer als gesendeter Buffer (https://www.delphipraxis.net/152271-empfangener-buffer-groesser-als-gesendeter-buffer.html)

Necz 16. Jun 2010 23:24

Delphi-Version: 2009

Empfangener Buffer größer als gesendeter Buffer
 
Nabend zusammen,

ich bin gerade dabei einen Taktikplaner für ein Spiel zu programmieren, soweit klappt alles gut.
Bin heute auf ein Problem gestoßen, das ich mir nicht erklären kann:
Ich sende per
Code:
Socket.SendString
eine Bitmap, die ich zuvor in einen StringStream geladen hab, an den Client.
Anfang und Ende des Strings sind durch eine kleine Protokollstruktur kenntlich gemacht, sodass der Client sie verarbeiten kann.
Die Bitmap ist beim Sendevorgang im String 787520 Byte groß, ich empfange jedoch am Client einen String der 792825 Byte groß ist, wodurch ich einen waagrechten Strich in der empfangenen Bitmap habe und diese ungefähr 10 Pixel nach oben verschoben ist.

Ich kann mir nicht erklären wodurch der String größer wird und weshalb die Bitmap nur nach oben verschoben und mit einem Strich versehen wird, anstatt defekt zu sein.
Hoffe mir kann jemand behilflich sein :)

Danke im voraus! Gruß Necz

Stevie 17. Jun 2010 06:01

AW: Empfangener Buffer größer als gesendeter Buffer
 
Versuch mal einen TMemoryStream

rollstuhlfahrer 17. Jun 2010 06:43

AW: Empfangener Buffer größer als gesendeter Buffer
 
Hat in Delphi 2009 der TStringStream auch eine Portierung nach Unicode erfahren? - Dann kann es sein, dass du in deinem Bitmap den Unicode-BOM siehst. Entweder du wechselst den Stream-Typ oder lässt mal die ersten 5 Zeichen aus und schaust, was dann passiert.

Bernhard

Necz 17. Jun 2010 09:16

AW: Empfangener Buffer größer als gesendeter Buffer
 
Vielen Dank für die Vorschläge,
aber ich hab sowohl den Stream ausgewechselt (TMemoryStream) , als auch einzelene Zeichen ausgelassen, nichts hat zum Erfolg geführt.

Der MemoryStream, den ich empfange ist immer noch ungefähr 8000 Byte größer als der gesendete MemoryStream.
Das heisst ja, dass es nicht am Stream-Typ liegt, sondern an der Übermittlung. Es müssen während dem Senden Dateipakete mitübertragen werden, die nicht zum Stream gehören.
Mir fällt kein Grund ein, wie es dazu kommen kann. Ich versuche jetzt mal die beiden Streams in eine Datei zu schreiben und zu vergleichen, vllt erkenne ich dann ja markante Stellen, die verändert sind.

Necz 17. Jun 2010 18:47

AW: Empfangener Buffer größer als gesendeter Buffer
 
Liste der Anhänge anzeigen (Anzahl: 1)
So habe jetzt die beiden Bitmpas in eine Datei speichern lassen, die hier als Anhang enthalten sind.Hab sie gezippt, um die Bilder nicht sklaieren zu müssen. Wie deutlich zu erkennen sind, sind es 2 verschiedene Bilder.
Das komische daran:
Laut MX HexEditor sind die Dateien aber vollkommen identisch. Mir baut sich ein großes Fragenzeichen im Kopf auf, wie sowas möglich ist.

Bin für jede Hilfe offen!

H4ndy 17. Jun 2010 19:05

AW: Empfangener Buffer größer als gesendeter Buffer
 
Identisch ist anders ;)
Code:
MD5 Hash of "empfangen.bmp": 612413e1447c0569c6142f21558efd97
MD5 Hash of "gesendet.bmp": 910fb2dd074891b359867d5da1b711a8
WinMerge findet Unterschiede am Anfang (eingeschobener Datenblock) und Ende (fehlende Daten).
Beide Dateien sind allerdings gleich gross.

Necz 17. Jun 2010 19:27

AW: Empfangener Buffer größer als gesendeter Buffer
 
Danke für den Hinweis.
Hm okay, dann muss ich die Ursache dafür finden, dass am Anfang Daten eingeschoben werden, die dazu führen, dass am Ende welche fehlen.

Necz 18. Jun 2010 18:23

AW: Empfangener Buffer größer als gesendeter Buffer
 
Lösung endlich gefunden.
Es lag an einem anderen Programm, das auf irgendeine Weise zum Server connected hat und scheinbar den String manipuliert hat.
Die Datei hieß thage.exe, ich hab im Taskmanager bissl rum geschaut und konnt mir weder die Herkunft noch den Nutzen dieser Datei erkennen, daher hab ich sie gelöscht. Danach funktionierte auch die Bildübertragung.

/closed :)

Danke für alle Hilfestellungen und Tips


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz