Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Server UserListe abfragen (https://www.delphipraxis.net/177595-server-userliste-abfragen.html)

Frage95 15. Nov 2013 09:32

AW: Server UserListe abfragen
 
ok dann versuche ich mal etwas ausführlicher zu werden :P

Delphi-Quellcode:
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.
Das ist mein Server.

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

p80286 15. Nov 2013 10:20

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

DeddyH 15. Nov 2013 10:21

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?

Frage95 15. Nov 2013 10:28

AW: Server UserListe abfragen
 
Okay der Ansatz hört sich ja gut an und wie mache ich das?:?:

DeddyH 15. Nov 2013 10:33

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:
Userlist:Fritz#Hans#August#Grete#Isolde#Adolar
(rein beispielhaft).

Frage95 15. Nov 2013 11:13

AW: Server UserListe abfragen
 
:?::?:

himitsu 15. Nov 2013 11:25

AW: Server UserListe abfragen
 
Genauso wie die Benutzernachtichten zu den Clients kommen, kannst du auch die Benutzerliste da hinsenden.

Frage95 15. Nov 2013 11:39

AW: Server UserListe abfragen
 
schon klar aber woher bekomme ich diese Liste ?

p80286 15. Nov 2013 11:57

AW: Server UserListe abfragen
 
Indem Du sie erstellst?
z.B. so:
Delphi-Quellcode:
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;
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.
Für mich etwas zu viel Konjunktiv.

ruß
K-H

himitsu 15. Nov 2013 12:09

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 12:14 Uhr.
Seite 2 von 4     12 34      

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