![]() |
AW: Server UserListe abfragen
ok dann versuche ich mal etwas ausführlicher zu werden :P
Delphi-Quellcode:
Das ist mein Server.
uses MainformU;
procedure server; begin frmServer.Port.Text := '55555'; frmServer.Server.Port := strtoint (frmServer.Port.Text); frmServer.Server.Active := True; end; procedure TfrmServer.FormCreate(Sender: TObject); begin Port.Text := '55555'; end; procedure TfrmServer.FormDestroy(Sender: TObject); begin Server.Active := False; end; procedure TfrmServer.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.'); Userzahl:=Userzahl +1; User.Caption:='User: ' + IntToStr(Userzahl); end; procedure TfrmServer.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.'); Userzahl:=Userzahl -1; User.Caption:='User: ' + IntToStr(Userzahl); end; procedure TfrmServer.ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + 'hat den Fehler: ' + inttostr(Errorcode)); Userzahl:=Userzahl -1; User.Caption:='User: ' + IntToStr(Userzahl); end; procedure TfrmServer.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var i:integer; Nachricht:AnsiString; begin Nachricht:=Socket.RemoteAddress + ': ' + Socket.ReceiveText; Memo1.Lines.Add(Nachricht); for i := 0 to Server.Socket.ActiveConnections -1 do Server.Socket.Connections[i].SendText(Nachricht); end; procedure TfrmServer.BtnAnhaltenClick(Sender: TObject); begin Server.Port := strtoint (Port.Text); Server.Active := False; BtnStarten.Enabled := True; BtnAnhalten.Enabled := False; Memo1.Lines.Add('Status: Server angehalten.'); end; procedure TfrmServer.BtnClearClick(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add('Server 1.0'); end; procedure TfrmServer.BtnSendenClick(Sender: TObject); var i:Integer; begin for i := 0 to Server.Socket.ActiveConnections -1 do Server.Socket.Connections[i].SendText('Nachricht vom Server: ' + EdSenden.Text); Memo1.Lines.Add('Nachricht vom Server: ' + EdSenden.Text); end; procedure TfrmServer.BtnStartenClick(Sender: TObject); begin Server.Port := strtoint (Port.Text); Server.Active := True; BtnStarten.Enabled := False; BtnAnhalten.Enabled := True; Memo1.Lines.Add('Status: Server gestartet.'); end; end. Dann habe ich eine Unit MainForm, in dieser Mainform befindet sich ein EditFeld, in diesem EditFeld können die Benutzer Ihren Nickname eingeben. Nun möchte ich, wenn sich z.B. 20 Leute "einloggen" dass bei jedem diese 20 Namen in der ListBox, die sich auch auf dieser MainForm befindet angezeigt wird. Nun möchte ich nur noch die ServerListe abfragen und diese dann in der ListBox speichern.:-D |
AW: Server UserListe abfragen
Also wenn das Dein Server ist, dann fehlt ihm zumindestens eine rudimentäre Benutzerverwaltung, sprich eine "ActiveUserList".
Sobald diese vorhanden ist, und natürlich gefüllt, kannst Du diese dann an die Clients schicken. (daß da ein paar Variablendefinitionen fehlen, und das eine oder andere ein wenig obskur ist, lassen wir mal unter den Tisch fallen) Gruß K-H |
AW: Server UserListe abfragen
Wie ist denn folgender Ansatz: sobald sich ein neuer Client an- oder abmeldet, sendet der Server ein definiertes Kommando an die verbundenen Clients, welche dann ihre Userliste aktualisieren?
|
AW: Server UserListe abfragen
Okay der Ansatz hört sich ja gut an und wie mache ich das?:?:
|
AW: Server UserListe abfragen
Na so, wie ich geschrieben habe. Die Ereignisse An- und Abmeldung benutzt Du ja bereits, und auch ein Senden des Servers habe ich im Code erkennen können. Was nun noch fehlt, ist das definierte Kommando sowohl auf Server- wie auch auf Clientseite, so etwas wie
Code:
(rein beispielhaft).
Userlist:Fritz#Hans#August#Grete#Isolde#Adolar
|
AW: Server UserListe abfragen
:?::?:
|
AW: Server UserListe abfragen
Genauso wie die Benutzernachtichten zu den Clients kommen, kannst du auch die Benutzerliste da hinsenden.
|
AW: Server UserListe abfragen
schon klar aber woher bekomme ich diese Liste ?
|
AW: Server UserListe abfragen
Indem Du sie erstellst?
z.B. so:
Delphi-Quellcode:
So könnte man es machen, die Frage ist aber wo die Information UserName herkommt, ebenso scheint ja auch Userzal vom Himmelgefallen zu sein und User könnte ein Formular sein.
Userlist: Tstringlist;
.. Userlist:=Tstringlist.create; procedure TfrmServer.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.'); Userzahl:=Userzahl +1; // woher auch immer das kommt! Userlist.Add(UserName); // woher auch immer das kommt! User.Caption:='User: ' + IntToStr(Userzahl); end; procedure TfrmServer.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var uli : integer; begin Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.'); Userzahl:=Userzahl -1; uli:=userList.Indexof(UserName); // woher auch immer das kommt! if uli>-1 then Userlist.delete(uli); // woher auch immer das kommt! User.Caption:='User: ' + IntToStr(Userzahl); end; Für mich etwas zu viel Konjunktiv. ruß K-H |
AW: Server UserListe abfragen
Man kann die Namen auch in den Benutzerdaten des Socket speichern.
Muß dann beim erstellen der Liste nur alles sockets auflisten und da den Namen auslesen. Oder wenn es nur in der Userlist gespeichert wird, dann macht es sich nicht schlecht da auch den zugehörigen Socket mit zu speichern, damit man eine Verbindung zwischen Socket und Benutzer hat. PS:
Delphi-Quellcode:
Useranzahl := Userlist.Count;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 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