Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client online bestätigung (https://www.delphipraxis.net/96066-client-online-bestaetigung.html)

Jackthecoder 18. Jul 2007 01:23


Client online bestätigung
 
Also ich habe in der schule ca 5 Rechner am laufen, auf diesen Rechnern befindet sich ein client (ClientSocket) der sich zu einem Server(ServerSocket) verbindet. Der Server ist in diesem fall mein Rechner.

ich sehe vor mir eine form mit einer listview komponente, in der listview sollen alle clients stehen die sich mit mir verbunden haben.

nun habe ich einige probleme undzwar folgende.

1. wenn ein client die verbindung mit mir beendet dann soll auch sein eintrag in meiner listview gelöscht werden, doch wie stell ich das an?

2. wie bekomme ich es hin das es keine doppeleinträge in der listview gibt?

ich bin noch relativ neu auf diesem gebiet und danke für jede hilfe. :-D

Ghostwalker 18. Jul 2007 04:35

Re: Client online bestätigung
 
Zu 1.

Du schickst dem Server, bevor der Client sich beended, eine definierte Nachricht (Abmeldenachricht). So weiß der Server, ClientXY ist nicht mehr da, und kann den Eintrag aus der Liste löschen


Zu 2.

Einfach beim Eintragen in den Listview, prüfen, ob der Client schon in der Liste ist. Ab einfachsten dürfte das mit Listbox.items.indexof(ClientKennung) >0 gehen.

Jackthecoder 18. Jul 2007 10:04

Re: Client online bestätigung
 
danke für deine antwort aber der client weiß nicht wann der benutzer sich abmeldet und manchmal kommt es ja vor das der clientrechner absützt und dann wäre diese methode damit der client sich aus der liste entfernt ja nicht sicher.

ich hätte es gerne so, dass alles vom server aus gesteuert wird und der client höchstens nur auf anfragen vom server reagiert....also der server soll einfach die listview durchgehen und jedem client der verbunden ist eine nachricht schicken und wenn diese nicht beantwortet wird soll der entsprechende client aus der liste gelöscht werden.

und deine zweite antwort habe ich nicht so richtig verstanden wie mache ich das genau mit dem verhindern der doppeleinträge? kannst du mir da ein beispiel machen?
EDIT//
das zweite problem hab ich gelöst......

nochmals danke für deine antwort.

SnuffMaster23 26. Jul 2007 22:49

Re: Client online bestätigung
 
Das erste Problem kannst du lösen indem du einfach sagst, die Clients müssen sich immer nach einem bestimmten Intervall beim Server melden sonst wird die Verbindung getrennt/als getrennt angenommen und der Client aus der Liste gelöscht.
Du kannst auch den Server alle ab und zu seine Clients "fragen" lassen ob sie noch da sind, wenn nicht innerhalb von z.B. drei Sekunden eine Antwort kommt => Client weg.
Oder der Client updatet die Liste ab und zu mit der Liste der aktiven Verbindungen die der Socket ja führt. Da haste auch schon alles drin von wegen Timeout und so.

//Edit: Lesen bildet :oops: bist ja schon selbst draufgekommen.

SirThornberry 27. Jul 2007 07:12

Re: Client online bestätigung
 
Gab es beim Server nicht auch ein Event OnClientDisconnect? Das könntest du auch verwenden.

Muetze1 27. Jul 2007 07:27

Re: Client online bestätigung
 
1. Im OnError ein Socket.Close einbinden.
2. OnClientDisconnect nutzen um den übergebenen Socket in der ListView zu finden
3. OnClientConnect den übergebenen Socket in die Listview eintragen, wobei du den übergebenen Socket an die Data Eigenschaft des ListViews weitergibst. Dadurch kannst du die Einträge beim Disconnect eindeutig identifizieren und bei einer Auswahl in der ListView kommst du damit auch problemlos auf den jeweiligen Socket...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz