Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Winsock socket.SendText (https://www.delphipraxis.net/145239-winsock-socket-sendtext.html)

Atretis 27. Dez 2009 14:38


Winsock socket.SendText
 
Hallo,
wenn ich schnell hintereinander was zum Server sende z.B. :

Delphi-Quellcode:
socket.SendText('Hallo');
socket.sendText('Welt';
... wird daraus beim Server 'HalloWelt'.

Wie kann ich das Problem auf der Client-Seite vermeiden ?
B.z.w. wie kann ich abfragen ob der vorhergehende Text schon gesendet wurde und der Puffer leer ist ?

Ich bedanke mich schon mal im Voraus für eure Antwort.
mfg
Ralf

SirThornberry 27. Dez 2009 14:42

Re: Winsock socket.SendText
 
Zuverlässig kannst du so etwas nur durch ein entsprechendes (selbst ausgedachtes?) Protokoll vermeiden.
Du musst dir also ein Format ausdenken was dir ermöglichst die Dinge auseinander zu halten.
In deinem Fall wäre es wohl das einfachste anstelle "Hallo" und "Welt" einfach "Hallo " und "Welt " (also mit nachfolgendem Leerzeichen) zu senden und das Leerzeichen als Trenner zu betrachten.
Im übrigen könnte es dir genau so passieren das Hallo nicht im ganzen ankommt sondern erst "Hal" und dann "lo". Unter Betrachtung all dieser Möglichkeiten ist ein Protokoll dringen angeraten. Denn wenn du nur "Hal" bekommst, weißt du das noch etwas folgenden muss weil das abschließende Leerzeichen fehlt.

Atretis 27. Dez 2009 14:55

Re: Winsock socket.SendText
 
Hi,
danke für deine Antwort.

Aber ob es zuverlässig beim Server ankommt spielt erstmal keine Rolle.

Gibt es eine Möglichkeit Clientseitig festzustellen ob der Sende-Puffer leer ist oder nicht ?

Nach dem Motto : Sende A -> warte bis A gesendet -> Sende B

mfg
Ralf

SirThornberry 27. Dez 2009 14:58

Re: Winsock socket.SendText
 
nein gibt es nicht. Denn wenn du etwas sendest wird es in mehreren Packeten gesendet. Es kann also sein das die ersten Packete schon angekommen sind und die anderen noch gar nicht abgesendet wurden. Nur du als derjenige der weiß was er erwartet kann wissen ob da noch etwas hinterher kommen müsste.

Atretis 27. Dez 2009 15:07

Re: Winsock socket.SendText
 
Hi,
ich verstehe ja, was du mir sagen willst.

Das der Server nicht wissen kann was da noch an Daten kommt ohne Abschlusszeichen.
Das juckt mich aber erstmal nicht.

Beispiel :

Sende A
Warte 10 Sec
Sende B

Das kommt immer als A und dann als B beim Server an. (und wenn von 100mal, 1mal nicht auch egal)

Sende A
Sende B

Kommt immer als AB beim Server an.

Nun will ich das 'Warte 10 Sec' aus dem vorangegangenen Beispiel durch eine Abfrage ersetzen.
z.B.

Sende A
Wenn A gesendet (ob angekommen oder nicht ist egal)
Sende B

Da gibt es keine Möglichkeit ?
mfg
Ralf

SirThornberry 27. Dez 2009 15:22

Re: Winsock socket.SendText
 
Bei folgendem Beispiel:

Sende A
Sende B

ist A ja bereits gesendet wenn "Sende B" aufgerufen wird. Nur wurde es noch nicht empfangen und/oder aus dem Puffer beim Empfänger gelesen.

Atretis 27. Dez 2009 15:31

Re: Winsock socket.SendText
 
Hi,
au man, ich dachte die ganze Zeit das die Daten sich im Sende-Puffer des Clienten sammeln...
und nicht im Empfangs-Puffer des Servers.

Das erklärt nun einiges.
Danke für deine Geduld.
mfg
Ralf

SirThornberry 27. Dez 2009 15:35

Re: Winsock socket.SendText
 
Ich würde nicht darauf wetten, dass es so ist wie von mir beschrieben. Allerdings würde ich auch nicht auf eine von beiden Varianten vertrauen sondern immer im Hinterkopf behalten das beim nächsten Betriebssystemupdate sich da etwas geändert haben kann.


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