Hallo,
Also wenn ich so ein ServerClient System baue, gehe ich immer so vor:
1. Wie schon jemand erwähnt eine Art Indikator, d.h. ein Wert der der Client an den Server und umgekehrt sendet, woher er weis, was er mit den einkommenden Daten machen soll.
Normalerweise deklariert man einen Type, der als Byte von Delphi umgesetzt wird und den an den Server sendet, da das Empfangen dadurch ein bischen Komplizierter wird, kann man auch einen Char (ein Zeichen) verwenden, was auch schon erwähnt wurde.
Z.B. wegen dem Passwort:
//Server
Delphi-Quellcode:
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
Nachricht,SendText :AnsiString;
begin
Nachricht:= Socket.ReceiveText;
If Nachricht[1] = #101 then //Erstes Zeichen überprüfen und Passwort filtern
begin
Delete(Nachricht,1,1); //Erstes Zeichen von der Nachreicht entfernen, damit wir nur das Passwort haben.
If Nachricht = 'Passwort' then //Bei 'Passowrt' das Passwort, das dein Vater haben möchte.
begin
//Wenn Passwort übereinstimmt, sende "Richtig Befehl" an client;
SendText := #102; //Richtig
end
else
begin
SendText := #103; //Falsch
end;
end;
end.
procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var Text : AnsiString;
begin
//Die Socket Variable kann man dazu benutzen direkt mit dem Client zukomumnizieren
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.');
Text := #100 //Z.B. für die Passwort abfrage
Socket.SendText(Text);
end;
//Client
Delphi-Quellcode:
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var Text : AnsiString;
SendT : AnsiString;
begin
Text := Socket.ReceiveText;
If Text[1] = #100
then //mit Text[1] überprüfst du das erste zeichen
begin
//Dialog oder sonstwas anzeigen zur Passwortabfrage. Variable SendT mit dem Eingegeben Passwort füllen.
SendT := #101 + Passwort;
//Passwort ist ein Platzhalter für z.b. Edit1.Text oder ähnliches
Socket.SendText(SendT);
end;
Text := Socket.ReceiveText;
//Antwort empfangen, es kann sein das du den grad gesendet text bekommst, bin mir nicht sicher, da ich normalerweise immer die Indy Komponenten dafür nehme.
If Text[1] = #102
then //mit Text[1] überprüfst du das erste zeichen
begin
//Passwort war richtig
end
else
If Text[1] = #103
then
begin
//Passwort war falsch
end;
end;
Soweit für die Kommunikation zwischen den Beiden. Die Werte von mir wie #100 usw. kannst du dir anpassen wie du willst.
Wegen dem Nicknamen würde ich mit 2 StringListen( musst du selbst per Code erstellen) arbeiten, oder 2 ListBoxen.
Diese sind nur beim Server.
In der einen Schreibst du die Socket.RemoteAddress und in der anderen den Nicknamen.
Den Nicknamen für eine Adresse bekommst du dan so:
Delphi-Quellcode:
//Adressen, NicknamenList sind ListBoxen
var Nickname : String;
Nickname := NicknamenList[Adressen.IndexOf(Socket.RemoteAddress)]; //IndexOf gibt dir den Index in der Liste von Adressen, da beide gleichviele Einträge und zu jeder Adresse ein Nickname existiert, kannst du mit dem Index von Adressen, dir den Nicknamen von der Adresse ausgeben lassen.
So hoffe ich konnte dir das System ein wenig näher bringen.
Gruß
NickelM