Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi allen Clients, alle connecteten clients anzeigen lassen ;-) (https://www.delphipraxis.net/73687-allen-clients-alle-connecteten-clients-anzeigen-lassen-%3B.html)

Executor 22. Jul 2006 01:01


allen Clients, alle connecteten clients anzeigen lassen ;-)
 
Erstmal hallo!
So, wie man ja am Titel erkennen kann ist mein thema (meiner meinung nach) etwas komplizierter.
Will ich nicht lang drumrumreden:
Ich bin seit einiger Zeit dabei, ein Chatprogramm zu erstellen. Ich habe nun folgendes Problem:
Ich möchte, dass man beim client, alle connecteten User sieht (wie etwa die Freundeliste in ICQ).
Da ich recht neu in delphi bin, habe ich keine ahnung wie ich es anstellen soll...Ich hab beim client eine listbox reingetan, wo die Clients dann später angezeigt werden sollen (für bessere Vorschläge als die Listbox bin ich gerne offen =))
Wie sage ich dem server nun, dass er alle connecteten User an alle senden soll?

Mein 2 Problem (aber nicht so wichtig wie das erste):
Ich habe die ini-files benutzt, um eine Datenbank zu erstellen, wo alle registrierten Accounts gespeichert sind.
Jetzt will ich, dass beim Login der Client an den Server die Daten schickt, der server diese überprüft, sein ok sendet, und die Wilkommensmeldung erscheint.
Das habe ich versucht so zu lösen:

Delphi-Quellcode:
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  clientsocket1.socket.sendtext('>connect');
  clientsocket1.socket.sendtext(form2.edit1.Text) //form2.edit1.Text ist der AccName
  clientsocket1.socket.sendtext(form2.maskedit1.text) //das Passwort
end;
das '>connect' gehört zum "Protokoll" und wird vom client gesendet, wenn er connecten will.
Der Server darauf:

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Text:string;
i: Integer;
o: integer;
pw: string;
ini: Tinifile;
begin

  Text:=Socket.ReceiveText;

  if text='>connect' then memo1.Lines.Add('--client allowed to connect-->'+socket.RemoteAddress)
  else
  if text<>'>connect'
  then begin
  Memo1.Lines.add(socket.RemoteAddress+'--('+Timetostr(now)+') : '+text);
   For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
   begin
   with ServerSocket1.Socket.Connections [I] do
   if (Connected) then SendText(Text)
end;
end;
end;
Wie lasse ich den Client jetzt warten, bis der server die daten überprüft hat, und sein ok schickt und wie lass ich die Logindaten überprüfen und schicke diese nicht gleich an alle clients, weil diese daten (also die Logindaten) ja <>'>connect' sind.
Hoffe ihr versteht mich und könnt mir helfen

Executor :wall:

BlackJack 22. Jul 2006 14:49

Re: allen Clients, alle connecteten clients anzeigen lassen
 
ich würde dir dieses tutorial empfehlen, darin wird ein Protokoll für einen Chat entwickelt, der nachher auch genau das kann was du vorhast.
http://www.delphi-library.de/topic_P...201_54269.html

schonmal vorneweg: ganz so einfach wie du das mit On(Client)Read und SendText machst geht das nicht, du musst dir auf jeden fall noch nen Eingangspuffer mit einbauen.

edit: was soll eigentlich erst "text='>connect'" und dann im else-teil text<>'>connect'? im else-pfad ist die <>-bedingung doch auf jeden fall erfüllt!

Executor 22. Jul 2006 16:30

Re: allen Clients, alle connecteten clients anzeigen lassen
 
mh, seh ich ja jetzt erst, mit dem <>, danke =)
Das mit dem eingangspuffer kapier ich noch nich so ganz, aber das Tutorial werd ich mir jetzt mal anschauen, danke=)

BlackJack 22. Jul 2006 17:10

Re: allen Clients, alle connecteten clients anzeigen lassen
 
Zitat:

Zitat von Executor
Das mit dem eingangspuffer kapier ich noch nich so ganz, aber das Tutorial werd ich mir jetzt mal anschauen, danke=)

Das Kreuz an der ganzen Sache ist, dass die Übertragung nicht synchron verläuft, d.h. dass nicht zwingend für jedes Socket.SendText() auch genau ein OnRead ausgelöst wird. Deswegen muss man im OnRead erstmal alles was ankommt in nen Puffer packen, und dann jedes mal schauen, ob schon ein kompletter Befehl deines Protokolls im Puffer zusammengekommen ist. Das steht aber auch alles in dem Tutorial erklärt.

Executor 23. Jul 2006 02:12

Re: allen Clients, alle connecteten clients anzeigen lassen
 
Ok, hab das Tut zur Hälfte durch, vielen Dank, ist wirklich gut ;-)
Aber ehrlichgesagt, hab ich das mit dem Puffer durch deinen kurzen Kommentar besser verstanden^^

Danke für die Hilfe

Executor


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