Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Clients verwalten? (https://www.delphipraxis.net/54666-clients-verwalten.html)

rtky_trunks 9. Okt 2005 13:31


Clients verwalten?
 
Hallo Leute.

Ich hab nen problemchen. :(
Ich hab mir nen Server gebastelt mit ner Indy komponente(TCPServer)
und nen Client mit dem gegenstueck^^(TCPClient).
Nun moecht ich, wenn mehrer clienten sich anmelden, sie verwalten koennen.

Habt ihr vllt ne Idee wie ich das machen soll? Mir faellt nichts ein.
Ich moechte dann gerne eine Nachricht an einen bestimmten client schicken oder sonstiges.
Mit einem Client ist das ja nicht sonderlich schwer, da es niemand anderen gibt dem ich das schicken koennt. Ich hab es auch schon geschafft alle angemeldeten clienten in ein ListBox zu speichern. Aber ich weiss net weiter..
Wenn sich jetzt einer abmeldet und ein andere an. und dass ein paar mal. Dann gibt das, das groesste durcheinander.

Ich hoffe ihr koennt mir Helfen.

Gruss MArc

Bernhard Geyer 9. Okt 2005 15:41

Re: Clients verwalten?
 
1, Verwalte Clients in TObjectList

2, Benachrichtigung über Schleife:
Delphi-Quellcode:
procedure FireMsgToClients;
begin
  for i := 0 to MyClientList.Count - 1 do
    MyClientList[i] as (TypvonClientObjekt).Send....
end;
3, Bei Abmeldung aus TObjectLIst austragen
Delphi-Quellcode:
MyClientList.Delete(Abmeldenter Client)
Code stellt nur Grundgerüst dar.

Zacherl 9. Okt 2005 16:04

Re: Clients verwalten?
 
Hallo,
ich habe 2 Vorschläge:

1. Die Indy 9 Chat Demo ist da sehr aufschlussreich.
2. Wenn es auch über die Sockets sein darf: in der OpenSource Spalte finden sich die ProfessionalConnect Komponenten.

Florian

rtky_trunks 9. Okt 2005 16:14

Re: Clients verwalten?
 
Hallo

Aehm, ja, danke.. aber.. :shock:

Kannst du mir bitte genau erklaeren wie ich das machen kann?
Was muss ich machen wenn ein Client connected?
also da: procedure TForm1.ServerConnect(AThread: TIdPeerThread);

und aehm.. :gruebel:.. Wie funktioniert das genau?
ICh mein ein Client verbindet sich und ,ja, und dann?? Dann wird irgendwas von ihm in die Liste eingetragen ? wenn ja was? ne IP adresse, oder mac adresse?? :gruebel:

hmmm. Und wie geht das dass ich nur ein bestimmten client eine Nachricht schicken kann?
Bitte erklaer(t) mir dass.

Gruss MArc


An den neuposter^^:
Die indy9 demos hab ich mir angeschaut und hab da auch ein Teil uebernommen. Aber hab da viele Probleme wenn sich ein Client(oder 2, 3, 4 ...) disconnecten und vllt 1 neu anmeldet. Dann gib das ein total durcheinander und naja dann stuertzt das programm ab mit 1000... Fehlermeldungen.

Bernhard Geyer 9. Okt 2005 16:32

Re: Clients verwalten?
 
Zitat:

Zitat von rtky_trunks
Kannst du mir bitte genau erklaeren wie ich das machen kann?
Was muss ich machen wenn ein Client connected?
also da: procedure TForm1.ServerConnect(AThread: TIdPeerThread);

AThread trägst Du in die Verwaltungsliste aus. Und es gibt auch einen ServerDisconnect mit den gleichen Parameter und da trägst Du in wieder aus der TObjectList aus.

Zitat:

Zitat von rtky_trunks
hmmm. Und wie geht das dass ich nur ein bestimmten client eine Nachricht schicken kann?
Bitte erklaer(t) mir dass.

z.B. an den 2ten-Client in deiner Objektliste
Delphi-Quellcode:
(MyObjectList[1] as TIdPeerThread).Send(....) (Ich hoffe so heißt die SEnde-Methode, hab gerade keine Delphi offen).

Zacherl 9. Okt 2005 16:34

Re: Clients verwalten?
 
Bei mir hat dieses Chat Demo sehr gut funktioniert und effizient gearbeitet (vom Code her)

Florian

Arnulf 9. Okt 2005 21:58

Re: Clients verwalten?
 
Du speicherst hier die thread objekte die dir vom indy zur verfügung gestellt werden.
Unpraktischerweise muß man bei indy die threads selbst verwalten.

Wenn also ein cient verbindet, dann macht indy eine neue verbindung für den client auf und übergibt diese einem thread.
Den mußt du dir also irgendwo speichern.
Am bessten speicherst du dir gleich noch ein paar userdaten dazu, damit du später noch weißt welcher user welcher ist.

und nachrichten kannst du dann so verschicken wie Bernhard Geyer geschrieben hat.
send - oder sendbuffer oder was auch immer es da gibt, gibts schon als methode für das thread objekt.

Im prinzip müsstest du hald etwas ähnliches machen wie ich es mit den tsockets gemacht hab.
Nur mußt du die threads hald selber verwalten bei Indy.
Vielleicht bekommst du eine idee was ich mein, wenn du dir das hier durchliest:
http://www.delphipraxis.net/internal...ct.php?t=62893

Auch wenn ich für die records kritisiert wurde funktionierts recht gut.

Arnulf


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 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