AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Wie erkennt Client wenn Server disconnected
Thema durchsuchen
Ansicht
Themen-Optionen

Wie erkennt Client wenn Server disconnected

Ein Thema von Sim_Star · begonnen am 18. Nov 2014 · letzter Beitrag vom 17. Jul 2015
Antwort Antwort
Dejan Vu
(Gast)

n/a Beiträge
 
#1

AW: Wie erkennt Client wenn Server disconnected

  Alt 8. Jun 2015, 07:30
Verschicke einfach ein Keep-Alive Paket
Ja, wenn es sich um UDP handelt.. Das hat er aber nicht genauer spezifiziert. Wenn es TCP ist, dann ist das irrelevant!
Äh... Nö. Das Verfahren wird in der Steuerungstechnik angewandt. Auch bei TCP-Verbindungen. Im wirklichen Leben bekommen weder Server noch Client immer mit, das eine Verbindung unterbrochen wurde. Dafür sorgen schon die intelligenten Switches.
Sollte jemand einfach nur das Netzwerkkabel ziehen, dann bekommst Du eigentlich immer innerhalb einer Minute das Disconnect dennoch mit.
Genau. 'eigentlich' . Entwickler sollten das Wort "Eigentlich" eigentlich nicht verwenden ("Eigentlich läuft das Programm", "Der Fehler dürfte eigentlich nicht auftreten" ).

In den Firmen, in denen ich gearbeitet habe, war es den Geräten egal, das sie eigentlich vom Verbindungsabbruch innerhalb einer Minute informiert sein müssten. Sie wurden es nicht. Auch nach 8 Stunden nicht. Und selbst wenn das bei einer normalen Infrastruktur nach einer Minute bekannt wird... Ist das nicht ein wenig lang?
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Wie erkennt Client wenn Server disconnected

  Alt 8. Jun 2015, 10:20
@Dejan Vu

Es ist etwas lange her dass ich Netzwerk Programmierung betrieben habe, aber meine Erinnerung hat mich nicht getäuscht.. Siehe msdn recv()
Zitat:
Return value

If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.
Man muss keine Heartbeat Pakete unter TCP schicken. Die Programlogik funktioniert einfach normal weiter, bis bei einem rcv() ein Disconnect erkannt wird. Siehe Codesnippet aus meiner alten Library
Delphi-Quellcode:
  //...
    Result := recv(FSocket, Buffer, BufferSize, 0);
    case Result of
      0: Disconnect;
      SOCKET_ERROR:
      begin
        Result := WSAGetLastError();
        if Result = WSAEWOULDBLOCK then
          Result := 0
        else
          Disconnect;
      end;
    end;
  //...
Disconnect macht ein closesocket und setzt Disconnected boolean auf true..
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Wie erkennt Client wenn Server disconnected

  Alt 8. Jun 2015, 11:35
Man muss keine Heartbeat Pakete unter TCP schicken. Die Programlogik funktioniert einfach normal weiter, bis bei einem rcv() ein Disconnect erkannt wird.
Man muss nicht, man sollte aber vielleicht.
TCP-Verbindungen sollen teilweise auch lautlos den Bach runter gehen, was man dann aber erst beim Senden merken würde.

Gegen einen Heartbeat auf Anwendungsebene kann man afaik nicht so viel sagen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Wie erkennt Client wenn Server disconnected

  Alt 19. Jun 2015, 07:06
U
Man muss keine Heartbeat Pakete unter TCP schicken. Die Programlogik funktioniert einfach normal weiter, bis bei einem rcv() ein Disconnect erkannt wird.
Ich habe mich auch dagegen gewehrt, heartbeats und checksums einführen zu müssen, aber leider ist alles möglich.
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#5

AW: Wie erkennt Client wenn Server disconnected

  Alt 17. Jul 2015, 13:33
Zitat:
Ich habe mich auch dagegen gewehrt, heartbeats und checksums einführen zu müssen, aber leider ist alles möglich.
Jup, man kann das aber auch nachstellen. Man nehme 2 PCs und ein Switch, man verbindet beide PCs via TCP ( Server-Client ) dann aus dem Switch die Netzwerkstecker raus und schon steht der Einsicht doch ein Heartbeat zu benutzen nichts mehr im Weg.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Nimral

Registriert seit: 21. Sep 2005
18 Beiträge
 
#6

AW: Wie erkennt Client wenn Server disconnected

  Alt 18. Jun 2015, 21:40
Äh... Nö. Das Verfahren wird in der Steuerungstechnik angewandt. Auch bei TCP-Verbindungen. Im wirklichen Leben bekommen weder Server noch Client immer mit, das eine Verbindung unterbrochen wurde. Dafür sorgen schon die intelligenten Switches.
Tschuldigt, wenn ich mich in den Thread drängle, aber das interessiert mich: inwiefern greifen "intelligente" Switches in das TCP Session Management ein?

Thx für Infos

Armin.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Wie erkennt Client wenn Server disconnected

  Alt 18. Jun 2015, 23:28
Tschuldigt, wenn ich mich in den Thread drängle, aber das interessiert mich: inwiefern greifen "intelligente" Switches in das TCP Session Management ein?
Alles was selbst den Status der Sessions überwacht um zu entscheiden, ob Packete durchgelassen werden oder sie entsprechend zu addressieren (zB. NAT und Firewalls), ist schon mal verdächtig
  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 09:49 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