Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TClientSocket Buffer probleme (https://www.delphipraxis.net/96555-tclientsocket-buffer-probleme.html)

day 26. Jul 2007 14:35


TClientSocket Buffer probleme
 
Hallo,
Ich benutze eine TClientSocket componente um eine Socketverbindung herzustellen. Jetzt habe ich Probleme bei längeren Strings und zwar empfängt er nicht alles. Geschickt wird der komplette string aber beim empfangen schneidet er einen Teil ab. Woran kann das liegen? kann man die Buffer grösse irgenwie einstellen?

DeddyH 26. Jul 2007 15:10

Re: TClientSocket Buffer probleme
 
Was heißt "längere Strings"? Ich glaube, ich kann mich an eine maximale Paketgröße von ~4kB erinnern (kann aber auch ein anderer Wert gewesen sein). Also müsstest Du den Buffer zur Not fragmentieren.

Muetze1 26. Jul 2007 17:22

Re: TClientSocket Buffer probleme
 
Er empfängt bestimmt alles, nur du beachtest nicht, dass du mehrfach im OnClientRead aufgerufen wirst, bis alles empfangen wurde. Bedenke dass die Sockets reine Rohdaten übertragen und kein Protokoll o.ä haben und auch nicht die gesendeten Blöcke genauso wieder ausspucken sondern eher noch mehr teilen oder kombinieren..

day 27. Jul 2007 06:57

Re: TClientSocket Buffer probleme
 
hallo, Geanu das ist das Problem er liest nur 4KB. Wie erkenne ich denn, dass ein String aus mehreren blöcken besteht?

DelphiKlaus 27. Jul 2007 07:04

Re: TClientSocket Buffer probleme
 
Hey,

ich habe immer gute Erfahrungen damit gemacht, vor jede Nachricht, die über eine Socket-Verbindung geschickt wird, die Länge zu setzen. Damit kann man dann gut überprüfen, ob die Nachricht schon komplett empfangen wurde. Zu beachten ist dabei, daß die Stückelung einer Nachricht ziemlich willkürlich sein kann, d.h. wenn z.B. ein Vier-Byte-Wert als Länge geschickt wird, muß als erstes überprüft werden, ob die vier Bytes schon eingetroffen sind. Erst wenn die da sind, kennt man die tatsächliche Länge.

Viele Grüße

Klaus

day 27. Jul 2007 07:11

Re: TClientSocket Buffer probleme
 
Hallo, Aber eigentlich würde ich erwarten, dass die komponete dies übernimmt.

Muetze1 27. Jul 2007 07:18

Re: TClientSocket Buffer probleme
 
Nein, wie ich oben schon geschrieben habe: Die Komponente überträgt einfach nur Daten, also einfach nur eine Reihe von Bytes die du ihr gibst. Diese kommen auch in der gleichen Reihenfolge beim Empfänger wieder raus, aber nicht in den gleichen Blöcken.

Wenn die Komponente dies übernehmen würde, dann bräuchte sie ein Protokoll. Damit würde sie nur noch mit seines gleichen sich unterhalten können und du könntest den Socket niemals für die Bedienung anderer Protokolle benutzen. Ich bin heilfroh, dass dort keine "Intelligenz" in Form eines vorgeschriebenen Protokolls enthalten ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 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