Hallo zusammen,
über eine TCP-Client connection bekomme ich Daten die ich in einer
Klasse schreibe. Umgekehrt, sendet die Klasse über die bestehende
connection etwas zum Client und erwartet innerhalb einer bestimmten Zeit
eine Antwort vom Client. Kommt keine Antwort, soll die Objektinstanz die
connection zum Client trennen.
Die Frage ist jetzt, wie kann ich bitte in der Klasse einen Timeout Timer einbauen?
Ich möchte nicht ein Timer auf das Form legen und diesen Konfigurieren,
weil jede Objektinstanz je einen eigenen Timer haben soll. Der Hintergrund
ist, das es mehrere Clients gibt die sich auf dem Server anmelden.
Wie geht das bitte? Des Weiteren würde mich interessieren ob es
Probleme geben kann wenn im Speicher bis zu 50 Uhren ticken.
Gruß Kostas
Ich würds einfach so machen (Ablauf):
Ich hoffe das Hilft dir.
Hi Markus09,
ach, zu Dumm. Ich hätte erwähnen sollen das ich eigentlich zwei
Timer benötige. Einen für das senden und empfangen der nachrichten,
und einen um die connection zu überwacht. Der Client sendet periodisch
zum Server ein Lebenszeichen(string) wenn nach einer Ablaufzeit nichts
zum senden da war. Sobald irgend etwas von Client kommt, würde ich
den Timer zurückstellen. Somit weis der Server welche Clientconnection
nicht mehr benötigt wird.
Ich glaube ich benötige schon einen Timer in der Klasse.
Benutzt wird von mir die Kombination TCPListener und TCPClient. Ist Dir
zufällig bekannt wie ich den Socket Timer dafür konfigurieren kann?
Ich würde dann den Sockettimer für die Sende-/Empfangspackete
verwenden und den Timer in der Klasse um die connection zu überwachen.
[edit] Habe soeben in der Hilfe System.Timers.Timer(); gefunden.
Ist eine normale Klasse die ein einfach in meiner Klasse einbinden kann.
Über den Sockettimer habe ich leider nicht gefunden.
Gruß Kostas
Hallo
Wieso sollen denn die "Inaktiven Verbindungen" weiter bestehen (das mit dem Lebenszeichen)?
Ist folgender Ablauf nicht besser?
Verbindung aufbauen
Datentransfer
Verbindung abbauen
Bei Bedarf später wiederholen
Oder hab ich das jetzt falsch verstanden? 🙂
Gruss Fellmer
Hallo Fellmer Lloyd,
möglicherweise ist es auch nicht richtig was ich da mache, bin für jeden
Hinweis dankbar.
Der Kern der TCP-Kommunikation ist vom Programierhans hier im Forum.
Der TCPListener hört auf einen Port. Sobald ein Client sich anmeldet, wird
die connection erstmal akzeptiert und in einer Hashtable abgelegt.
Der Client sendet nach dem Anmelden seine Signatur. Die Client connection
bleibt offen damit ich auch später mit dem Client kommunizieren kann.
Wenn jetzt der Client seinen Stromstecker zieht, merkt das der Server nicht.
Obwohl die client connection noch offen und in der Hashtable ist.
Ich habe keine Möglichkeit gefunden das der Server automatisch
benachrichtigt wird wenn der Client nicht mehr da ist. Es gibt wohl eine
wenn man direkt über Sockets die Kommunikation programmiert.
Aber da bin ich Lichtjahre davon entfernt. 🙂
Es soll jetzt zwei Stellen geben wo die client connection geschlossen wird,
und aus der Hashtable verschwindet:
Anmerkung: der Client sendet ohnehin schon periodisch Packete zum Server!
Nur sehr vereinfacht dargestellt. Der Timer setzt auch entsprechende Flags
u.s.w.
Gruß Kostas