Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Nickliste Chat (https://www.delphipraxis.net/102726-nickliste-chat.html)

Koksi 3. Nov 2007 12:54


Nickliste Chat
 
Guten Tag,

Ich code zurzeit an einem Chat mit Server und Client !

Ich benutze folgende Komponenten : Clientsocket und Serversocket !

Könnte mir jemand ein Code beispiel geben wie ich eine Nickliste programmieren könnte oder einer den Code posten???

mfg
Koksi

idontwantaname 3. Nov 2007 12:56

Re: Nickliste Chat
 
Ich werde dir zwar keinen Code geben, aber folgenden Denkansatz:
Dein Server weiß, wer sich zu ihm verbindet. Speichere alle Nicks und lasse einen Client diese Liste abrufen ;)

Koksi 3. Nov 2007 15:49

Re: Nickliste Chat
 
hat jemand ein code beispiel?

Torpedo 3. Nov 2007 16:05

Re: Nickliste Chat
 
Es gibt kein allgemeines Code-Beispiel. Der Code ändert sich je danach wie du den Chat realisiert hast.
Pseudocode:


(Server)
Wenn Client verbunden hat:
Sende Liste aller verbundenen Clients an alle Clients.

(Client)
Wenn Serverliste erhalten:
Füge Liste in eine Listbox ein.

RWarnecke 3. Nov 2007 16:07

Re: Nickliste Chat
 
Zitat:

Zitat von idontwantaname
Ich werde dir zwar keinen Code geben, aber folgenden Denkansatz:
Dein Server weiß, wer sich zu ihm verbindet. Speichere alle Nicks und lasse einen Client diese Liste abrufen ;)

Ich führe den Denkansatz mal weiter. Diese Liste mit den angemeldeten Clients werden an alle Clients gesendet und zum Beispiel in einer Listbox ausgegeben.

Real_Thunder 3. Nov 2007 16:56

Re: Nickliste Chat
 
Es gibt dazu sehr viele Beispiele im forum.
Und es gibt viele möglichkeiten dies zu machen.
als erstes solltest du dir ein komplettes Protokoll überlegen.

Hier mal ein Paar grundgedanken:
Client verbindet zum server,
server merkt sich den socket und dazu den nick. (ermöglicht später ein Privatgespräch)

das ganze habe ich so realisiert das ich ein array of record gemacht habe und im record

socket:TCustomwinsocket;
nick:string;
chatrauume: array of integer;

Wenn jetzt also jemand in einen chatraum kommt, dann sollte er eine anfrage an der server senden,
der server durchsucht dann in seinem array of record nach den chaträumen, wenn diese stimmen,
wird der nick gesammelt, wenn alle nicks gesammelt sind wird es übertragen.

Ich werde hier ebenfalls kein Copy Und Paste code posten.
wenn du irgendwo nicht weiterkommst, poste einfach das was du schon hast.. und dir wird sicher geholfen..
und wenn du irgendetwas nicht verstanden hast.. dann frage halt

MfG Real Thunder

Koksi 4. Nov 2007 14:04

Re: Nickliste Chat
 
Entschuldigen sie aber mit Sockets kenn ich mich noch nicht so gut aus :oops:

mit

Clientsocket1.socket.sendtext(edit1.text+' hat den Raum betreten...');

und der Server :

Socket.Receivetext...

ja alles schön und gut aber wie geht das mit dem Nickname wie kann ich die Namen in einer Listbox von dem Server listen und dann abfragen lassen vom Client ???

nachti1505 4. Nov 2007 14:58

Re: Nickliste Chat
 
Du wirst ein eigenes Protokoll dafür definieren müssen....

OnConnect, Client:
Delphi-Quellcode:
Clientsocket1.socket.sendtext('#NICKLIST');
Server erhält Nachricht "#NICKLIST"
Delphi-Quellcode:
for i:=0 to NickList.Count - 1 do
  ServerSocket1.Socket.SendText('#NICKNAME: ' + NickList.Items[i]);
Client erhält Nachricht "#NICKNAME: ksngfskj"
Delphi-Quellcode:
  if pos('#NICKNAME', Msg) > 0 then
    NickListBox1.Items.Add(copy(Msg, 12, length(Msg) - 12);
Ist natürlich mehr Pseudocode denn funktionsfähiges Delphi...

jbg 4. Nov 2007 15:12

Re: Nickliste Chat
 
Zitat:

Zitat von Koksi
Ich benutze folgende Komponenten : Clientsocket und Serversocket !

Die beiden Komponenten sind schon lange abgesagt und nur noch für Altlasten mit dabei. Sie sind nicht einmal mehr bei neueren Delphi Versionen in die IDE installiert und müssen von Hand nachinstalliert werden.

Progman 4. Nov 2007 16:32

Re: Nickliste Chat
 
TClientSocket und TServerSocket haben aber ein stabiles Verhalten und deren Einsatz ist durchaus noch zweckmäßig.
Und für das füllen einer Nickliste würde ich mich ans IRC-Protokoll anlehnen. Da gibt es den Befehl "/names #channel", den jeder Client aufruft und der Server sendet ihm die Nicks des Channels.

Real_Thunder 6. Nov 2007 13:53

Re: Nickliste Chat
 
So dann will ich dir mal ein wenig unter die arme greifen....
Als erstes überlegst du dir ein protokoll.
Ich habe es so gemacht:

Befehl<|#|>werte<|eoc|>

wobei du dir die befhele selbst ausdenken mußt...

hier mal ein beispiel

Client melden sich am server an beim server wird dann ein onClientConnected ausgeführt

Nun sollte der server den Socket (die verbindung) speichern und den client nach dem nick fragen.

Delphi-Quellcode:
Socket.Sendtext('WANT<|#|>nick<|eoc|>');
wenn der client es empfängt antwortet er mit:
Delphi-Quellcode:
Socket.Sendtext('SENDNICK<|#|>DeinNickname<|eoc|>');
wenn der server deinen nick hat, dann kann er anfangen alle nicknamen zu senden.
Delphi-Quellcode:
Socket.Sendtext('SENDNICKLIST<|#|>nick1<|*|>nick2<|*|>nick3<|*|>nick4<|*|>nick5<|eoc|>');

mit funktionen wie explode (kannst du hier im forum finden)
kannst du dann die nicks in ein array speichern, und anschließend in eine listbox o.ä. packen

MfG real Thunder.


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