Entwickler-Ecke

Internet / Netzwerk - CHAT: Nicknamen übermitteln...


Scrat - Mi 02.07.03 15:55
Titel: CHAT: Nicknamen übermitteln...
Hi,

ich habe folgendes mit meinem Chatprogramm vor:
Alle Nicknamen der Clienten, die sich mit dem Chat-Server verbinden lassen, sollen in einer Listbox angezeigt werden.

Das heißt:
Bei allen Chat-Clienten und beim Chat-Server sollen alle verbundenen Nicknamen angezeigt werden.


Nun die Frage....
Wie übermittel ich einen Nicknamen...
Bei meinem Chatprog. wird der Nickname in ein EDIT1 reingeschrieben.


Tino - Mi 02.07.03 16:14

Wie übermittelst du denn den Nachrichtentext?


Scrat - Mi 02.07.03 16:17

Ich benutze Serversocket und Clientsocket.

Und die Texte übersende ich mit:
SendText oder mit ReceiveText

MFG
Scrat


olliistmeinname - Mi 02.07.03 19:13

mach es doch so :

wenn du einen nick sendest:

Quelltext
1:
clientsocket1.Socket.SendText('nick='+ edit1.text)                    


wenn du Nachrichten sendest:

Quelltext
1:
clientsocket1.Socket.SendText('message='+ edit1.text + ":" + edit2.text)                    



edit1 ist das Feld in das man den nick eingibt.
edit2 it das Feld in das man die Nachrichten eingibt.

Jetzt musst du das noch auf dem Serverauswerten .


Tino - Do 03.07.03 10:00

Scrat hat folgendes geschrieben:
Ich benutze Serversocket und Clientsocket. Und die Texte übersende ich mit: SendText oder mit ReceiveText

Dann benutze doch genau diese Methoden um den Nickname zu senden.


Scrat - Do 03.07.03 10:27

Ok das geht....aber ich möchte jetzt auch noch das der 'Nickname' nach einer erfolgreichen Verbindung in einer Listbox eingetragen wird.

In dr Listbox sollen alle Nicknamen erscheinen die gerade mit dem Server verbunden sind.

Wenn ich jetzt also mit Sendtext den Nicknamen sende....dann muss ich ja bei allen anderen Verbundenen Clienten 'ReceiveText' angeben.

Aber mit Recive Text empfnage ich ja auch den normalen Text...und nicht nur den Nicknamen.

Wie kann ich diese beiden Werte trennen...mit 2 Sockets?


MaRiO - Di 08.07.03 15:11

Hallo Scrat !

Probier es mal so :

1. Diese Funktion in dein Server einbauen :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
function GetToken(aString, SepChar: string; TokenNum: Byte): string;
var 
  Token: string
  StrLen: Byte; 
  Num: Byte; 
  EndofToken: Byte; 
begin 
  StrLen     := Length(aString); 
  Num        := 1
  EndofToken := StrLen; 
  while ((Num <= TokenNum) and (EndofToken <> 0)) do 
  begin 
    EndofToken := Pos(SepChar, aString); 
    if EndofToken <> 0 then 
    begin 
      Token := Copy(aString, 1, EndofToken - 1);
      Delete(aString, 1, EndofToken); 
      Inc(Num); 
    end 
    else 
      Token := aString; 
  end
  if Num >= TokenNum then 
    Result := Token 
  else 
    Result := ''
end;


2. Deine Nachrichten schickst du dann im folgenden Format :


Quelltext
1:
ClientSocket1.Socket.SendText('NickName'+'#'+Edit1.Text);                    

Die Raute (#) ist zur Trennung des Nicknamens von der Eigentlichen Nachricht.

3. Wenn die Nachricht jetzt an deinem Server ankommt, kannst du Sie mit der Function Gettoken auseinander nehmen.
z.b. so :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Var
  NickName: String;
  Nachricht: String;
  S: String;
Begin
   
  S:=Socket.Receiveln;

  NickName:=Trim(Gettoken(S, '#' ,1));
  Nachricht:=Trim(Gettoken(S, '#' ,2));

In der Variable Nickname steht jetzt der Nickname der Gesendet wurde und in der Variable Nachricht steht jetzt der Eingegebene Nachrichten Text.

4. NickName in die ListBox Adden.

Ich habe denn Quelltext nicht Getestet, aber er sollte Funktionieren.

Mfg
Mario :lol:


Scrat - Fr 11.07.03 13:14

Danke @ Mario,

das klappt so schon ganz gut. Nur der Nachteil ist:

Der Nickname wird immer wieder in die Listbox reingeschrieben, wenn eine Nachricht per Sendtext kommt...

Wie kann ich denn der Listbox sagen das sie die einzelnen Einträge überprüfen soll und wenn ein Eintrag mit dem Namen des Nicknamens übereinstimmt dieser dann nicht mehr in der Listbox geaddet werden soll?

MFG
Scrat


MaRiO - Fr 11.07.03 17:22

Hallo Scrat !

Z.b so :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Var
    i :=Integer;
Begin
   For i:=ListBox1.Items.Count -1 Downto 0 Do Begin
   IF Trim(Lowercase(ListBox.Items[i])) = Trim(Lowercase(NickName)) Then Begin
       Exit;
   End Else Begin
     ListBox1.Items.Add(NickName);
   End;
 End;


Ich hoffe Ich konnte dir Helfen. :D

Mfg
Mario

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


foxy - Mo 14.07.03 08:48

kurz und knappe antwort gebe ich dir

Beispieldateien unter Delphi