Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Grösse von RecieveText einer Socket!? (https://www.delphipraxis.net/108598-groesse-von-recievetext-einer-socket.html)

torud 16. Feb 2008 09:03


Grösse von RecieveText einer Socket!?
 
Hallo Wissende,

ich erhalte über eine ClientSocket XML-Daten. Scheinbar ist der XML-String zu gross, denn ich erhalte beim ClientRead den Aufruf meiner MessageBox 2 mal, obwohl nur ein XML-String geschickt wurde.


Delphi-Quellcode:
procedure TForm1.ClientScoreRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(ClientScore.Socket.ReceiveText);
Wird mir 2 mal angezeigt. Beim ersten mal mit dem ersten Abschnitt des XML-Strings und beim 2. mit dem Rest. Gibt es eine Möglichkeit dies zu verbessern? Da ich den XML-String parsen will/muss, muss ich wissen, ob der String vollständig ist, oder eine andere Funktion benutzen oder eine andere Komponente. Scheinbar ist die Größe der auf einmal übertragbaren Daten begrenzt!?

Muetze1 16. Feb 2008 12:24

Re: Grösse von RecieveText einer Socket!?
 
Dieses Verständnisproblem ist anscheinend bei vielen vorhanden. Der Socket überträgt rein die Bytes die ihm angetragen wurden. Dabei sorgt er nur dafür, dass die Bytes in der richtigen Reihenfolge wieder hinten rauskommt, nicht aber wie sie aufgeteilt werden. Wenn du eine schlechte Internetverbindung hast, dann kannst du im schlechtesten Falle mit jedem einzelnen Zeichen aufgerufen werden. Der Socket implementiert kein Protokoll, dass musst du machen, er überträgt rein die Daten. Er garantiert dir die Reihenfolge, die Teilung ist aber völlig belanglos.

Denk dir ein Protokoll aus, damit der Empfänger weiss, wieviele Daten er empfangen muss bis es komplett ist oder sammle so lange bis der XML Parser sagt: Jo, vollständig. Dann heb den Rest auf, der wird dann wohl für eine neue XML Struktur sein die folgt.

torud 16. Feb 2008 14:00

Re: Grösse von RecieveText einer Socket!?
 
Danke für den Tipp. Das wusste ich soo noch nicht! Ich suche nun nach dem Start- und Anfangszeichen und bastel die Strings zusammen.


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