AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen
Thema durchsuchen
Ansicht
Themen-Optionen

Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

Ein Thema von Cyberaxx · begonnen am 22. Dez 2013 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

  Alt 24. Dez 2013, 09:04
Die sauberste Art eine TCP-Verbindung zu trennen ist dem Partner einen Quit-Befehl zu senden.
Man findet diesen Weg sehr häufig in bekannten Internetprotokollen.
Bei FTP sendet der Client z.B. dem Server eine QUIT-Message und der Server beendet dann die TCP-Verbindung.
Dies gibt beiden Teilnehmern die Möglichkeit sauber alle Aufgaben abzuschliesen.
Natürlich sollte sowohl der Client als auch der Server eine Trennung der Verbindung (z.B. abgezogenes Ethernetkabel) ohne Endlosschleife überleben.
Allerdings kann ein Teilnehmer eine unterbrochene TCP-Verbindung nur dann entdecken, wenn er entweder selbst etwas sendet oder wenn er das FIN-Paket der Gegenstelle empfangen wurde.

Auf jeden Fall ist es empfehlenswert einen Quit-Befehl im Datenprotokoll vorzusehen.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

  Alt 25. Dez 2013, 10:22
Es geht ja genau um den Fall das die Verbindung aus unbekannten Gründen beendet wurde,eben durch gezogenes Kabel, Verlust der Internetverbindung, Rechner Absturz o.ä.

Ich habe bisher unter Windows immer direkt mit den Sockets gearbeitet und da konnte man vor dem Beenden des Servers aus Serversicht alle Clientverbindungen trennen,
Die Indys haben ja auch im Client ein OnDisconnect, das wurde in egal welchem Versuch Serverseitig die Verbindung zu trennen nie aufgerufen.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.014 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

  Alt 25. Dez 2013, 18:20
Die Indys haben ja auch im Client ein OnDisconnect, das wurde in egal welchem Versuch Serverseitig die Verbindung zu trennen nie aufgerufen.
TIdTCPConnection (die Vorfahrklasse von TIdCustomTCPClient) hat eine Methode OnDisconnected (nicht OnDisconnect).

Diese wird aus der Methode TIdTCPConnection.Disconnect aufgerufen, also nachdem der Client die Verbindung zum Server geschlossen hat. Mit dem serverseitigen Schliessen hat diese Methode nichts zu tun.

Auf der Client-Seite kann nur mit einem kontinuierlichen Read auf der Connection das serverseitige Schliessen der Verbindung erkannt werden. Im Fall der Indy TIdTCPClient Klasse würde clientseitig eine Exception (EIdConnClosedGracefully oder ein EIdSocketError) ausgelöst, wenn das Read vom Socket nicht weiter möglich ist. Die Behandlung einer "Read Timeout" Exception muss bei diesem Verfahren auf der Clientseite u.U. auch vorgesehen werden, diese bedeutet aber nur, dass keine Daten empfangen wurden, und nicht, dass der Server die Verbindung getrennt hat.
Michael Justin
  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 14:13 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