TcpClient-Verbindung testen

25/07/2008 - 13:37 von Karl M. | Report spam
Hallo NG!

Wie kann ich bei einem TcpClient-Objekt überprüfen, ob die Verbindung noch
besteht?

Die .Connected-Eigenschaft zeigt das wohl nicht an.

In meinem Test baue ich eine Verbindung von einem Client zu einem Server
auf. Vom Client aus baue ich die Verbindung wieder ab oder schließe einfach
das Programm. Am Server hole ich mir mittels eines TcpListeners einen
TcpClient dazu. Nach dem Disconnect-Vorgang des Clients, steht beim Server im
TcpClient.Connected aber immernoch True drin.

Hat jemand eine Idee?

Mit freundlichen Grüßen
 

Lesen sie die antworten

#1 Frank Dzaebel
25/07/2008 - 23:44 | Warnen spam
Hallo Karl,

Wie kann ich bei einem TcpClient-Objekt überprüfen,
ob die Verbindung noch besteht?



indem Du einen "vereinbarten" Lebenstest in den
Stream schreibst. Es ginge auch ein willkürlicher
Schreibversuch, der dann in einer definierten Socket-
oder IOException endet. Aber schliesslich soll der
Server ja auch diesen Lebenstest sauber behandeln.



Nach dem Disconnect-Vorgang des Clients, steht beim Server im
TcpClient.Connected aber immernoch True drin.



ja, normal.

Connected ist ja nur dann true, wenn der Client-Socket beim
*letzten* Vorgang mit einer Remoteressource verbunden war.

[TcpClient.Connected-Eigenschaft (System.Net.Sockets)]
http://msdn.microsoft.com/de-de/lib....connected(VS.80).aspx

Zitat:

"Weil die Connected-Eigenschaft nur den Zustand der Verbindung
wàhrend des letzten Vorgangs wiedergibt, sollten Sie versuchen,
eine Meldung zu senden oder zu empfangen, um den aktuellen
Zustand zu bestimmen. Nachdem das Senden der Meldung
fehlgeschlagen ist, gibt diese Eigenschaft nicht mehr true zurück.
Beachten Sie, dass dieses Verhalten vorgesehen ist. Sie
können den Zustand der Verbindung nicht zuverlàssig überprüfen,
da die Verbindung in der Zeit zwischen der Überprüfung und
dem Senden/Empfangen getrennt werden kann. Der Code sollte
von einer vorhandenen Verbindung des Sockets ausgehen
und fehlgeschlagene Übertragungen ordnungsgemàß behandeln."


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen