AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?
Thema durchsuchen
Ansicht
Themen-Optionen

ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

Ein Thema von Caps · begonnen am 21. Apr 2020 · letzter Beitrag vom 22. Apr 2020
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 21. Apr 2020, 16:07
Hallo,

ich habe mal eine Verständnisfrage, weil ich nichts dazu gefunden habe:

Ich verwende einen ClientSocket, um Daten mit der Methode Socket.SendText in eine TCP-Verbindung zu schreiben. Das funktioniert auch, jedoch würde ich gern darauf reagieren, wenn der Schreibvorgang erfolgreich abgeschlossen ist.
Ich stehe momentan leider auf dem Schlauch, da das einzige Ereignis, welches so klingt als sei es dafür gemacht (OnWrite) lt. Delphi-Hilfe dazu gedacht ist, einen Schreibvorgang auszulösen, statt darauf zu reagieren.

Danke für einen kleinen Stupser in die richtige Richtung!

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 21. Apr 2020, 16:25
Hallo,
das nennt sich Protokoll.
Du selbst legst fest, wenn das Schreiben beendet ist.
Z.B. Mit einem Endezeichen (#1310 z.B.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.130 Beiträge
 
Delphi 12 Athens
 
#3

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 21. Apr 2020, 17:39
Jo, "Protokol" = Definition wie die Daten in deinem Stream/Socket aufgebaut sind.

Wie bereits erwähnt, kannst du ein "beliebige" Endezeichen/-zeichenfolge definieren, welches natürlich nicht in den "normalen" Daten enthalten sein darf, bzw. was dort entsprechend maskiert wird.
Und beim lesen dann so lange, bis du zu diesem Zeichen/Zeichenfolge kommst.

Alternativ kann man auch zu Beginn hinschreiben, wie lang die nachfolgenden Daten sind.
z.B. mit "nummer"+Endezeichen oder besser gleich als Byte, Word, LongWord/Integer oder sonstwas mit fester Länge.
Dann am Ziel erst die Länge einlesen und dann weißt du schon vorher, wieviele Daten nun kommen.

ps: Bei Zeilenumbruch als Trennzeichen, da könnte man auch sowas wie TidTelnet verwenden (den Port darf man nach belieben verändern),
denn das ist ein Socket, wo einzelne "Befehle" als "Zeile" übertragen werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#4

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 22. Apr 2020, 08:42
Hi, danke für Eure Antworten!

Das Problem ist aber leider anders gelagert.
Es ist so, dass das Schreiben in die Verbindung ja je nach Netzwerkqualität kürzer oder länger dauern kann.
Wenn ich aber den Socket vernichte oder die Anwendung schließe ohne zu wissen, ob bereits alles geschrieben worden ist, dann hacke ich unter Umständen die Übertragung ab, obwohl ich noch warten könnte, wenn ich nur wüsste dass er "noch schreibt".

Es gibt für diese Verbindung übrigens ein Protokoll, das Problem ist, dass der Server schon mitkriegt, wenn er alles hat, aber wie kriegt's der Client mit? Der Server ist nicht von mir sondern von einer anderen Firma, da kann ich nix am Verhalten des Servers ändern oder so, leider.

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 22. Apr 2020, 12:15
Es gibt Komponenten die lösen das Event erst aus wenn alle Daten empfangen wurden und nicht nach jedem „Paket“. Ich benutze die sgcWebSockets. Eventuell hilft es dir weiter...
Michael Kübler
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.822 Beiträge
 
Delphi 12 Athens
 
#6

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 22. Apr 2020, 13:33
Ich glaube dem Fragesteller geht es darum mitzubekommen, wann sein ClientSocket alle Daten WIRKLICH verschickt hat.
Denn erst dann sollte er geschlossen werden.

Dein Ansatz wäre, dass die Komponente erst dann ein Event auslöst, wenn das ACK für das Paket empfangen wurde?
Das wird aber sicher in die Hose gehen, da bei TCP ein ACK meist erst nach mehreren Paketen gesendet wird.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: ClientSocket: Welches Ereignis nach erfolgreichem Schreiben?

  Alt 22. Apr 2020, 13:55
Ich glaube dem Fragesteller geht es darum mitzubekommen, wann sein ClientSocket alle Daten WIRKLICH verschickt hat. [..]
Ja , das ist in der Tat meine Frage.
Ich werte jetzt notgedrungen das Eintreffen der Serverantwort (OnRead) als Signal, dass der Client mit Schreiben fertig ist, das ist besser als nix, aber hm...

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 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