Zhen
Lt. Junior Grade
- Registriert
- Aug. 2009
- Beiträge
- 299
Hallo Leute,
ich hätte da mal eine Frage zu der TcpClient Klasse in C#.
Es geht nämlich darum, dass ich ein Server Tool habe und eben ein Client Tool.
Der Client verbindet sich zum Server und man kann dann vom Server an die Verbundenen Clients die Nachrichten verschicken.
Hab da nur ein Problem. Das Verbinden und Verschicken klappt ja wunderbar, aber wenn der Client die Verbindung trennt, dann wird der nach wie vor in der Liste angezeigt, aber ich bekomms nicht rauß warum.
Wenn man beim Client die Verbindung mit: Tcpclient.Close() schließt, dann sollte doch beim Server "TcpClient.Connected" false ergeben oder nicht? Genau das tut es nämlich nicht.
Hier noch der Code vom Client zum schließen der Verbindung:
Hier der Code vom Server zur Abfrage ob der Client verbunden ist:
Noch kurz zur Klärung...
Bei mir werden die Clientsverbindungen auf dem Server in ein Hashtable (UserOnline) gespeichert. Die Schlüssel zu den Verbindungen sind außerdem noch in der (UserName) einem HashSet<string> gespeichert.
ich hätte da mal eine Frage zu der TcpClient Klasse in C#.
Es geht nämlich darum, dass ich ein Server Tool habe und eben ein Client Tool.
Der Client verbindet sich zum Server und man kann dann vom Server an die Verbundenen Clients die Nachrichten verschicken.
Hab da nur ein Problem. Das Verbinden und Verschicken klappt ja wunderbar, aber wenn der Client die Verbindung trennt, dann wird der nach wie vor in der Liste angezeigt, aber ich bekomms nicht rauß warum.
Wenn man beim Client die Verbindung mit: Tcpclient.Close() schließt, dann sollte doch beim Server "TcpClient.Connected" false ergeben oder nicht? Genau das tut es nämlich nicht.
Hier noch der Code vom Client zum schließen der Verbindung:
Code:
private void CloseConnection() {
try {
Sender.Close();
Receiver.Close();
server.Close();
} catch (Exception) {
}
}
Hier der Code vom Server zur Abfrage ob der Client verbunden ist:
Code:
private void RemoveUser() {
while (true) {
if (UserName.Count > 0) {
foreach (string abc in UserName) {
TcpClient offClient = (TcpClient)UserOnline[abc];
if (offClient.Connected == false) {
UserOnline.Remove(abc);
UserName.Remove(abc);
ListBoxRemove(abc);
}
}
}
}
}
Noch kurz zur Klärung...
Bei mir werden die Clientsverbindungen auf dem Server in ein Hashtable (UserOnline) gespeichert. Die Schlüssel zu den Verbindungen sind außerdem noch in der (UserName) einem HashSet<string> gespeichert.