![]() |
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:
das '>connect' gehört zum "Protokoll" und wird vom client gesendet, wenn er connecten will.
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; Der Server darauf:
Delphi-Quellcode:
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.
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; Hoffe ihr versteht mich und könnt mir helfen Executor :wall: |
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.
![]() 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! |
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=) |
Re: allen Clients, alle connecteten clients anzeigen lassen
Zitat:
|
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 04:42 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