![]() |
Winsock socket.SendText
Hallo,
wenn ich schnell hintereinander was zum Server sende z.B. :
Delphi-Quellcode:
... wird daraus beim Server 'HalloWelt'.
socket.SendText('Hallo');
socket.sendText('Welt'; 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 |
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. |
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 |
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.
|
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 |
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. |
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 |
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