Hi,
ich nehme mal an dass du irgendwie eine Memo-Komponente verwendest, um den Text darzustellen. Wenn der Client auf den "Senden"-Button klickt, sendest du den Text einfach an den Server ohne sie in dein Memo zu schreiben.
Delphi-Quellcode:
procedure TForm1.SendClick(Sender: TObject);
begin
if connected = true
then begin
{ connected ist einfach nur eine Variable um zu gucken, ob der Client mit dem Server verbunden ist }
ClientSocket1.Socket.SendText(Edit1.Text + '
: ' + Edit2.Text);
{Edit1.Text ist der eingegebene Nick und Edit2.Text der eingegebene Text }
Edit2.SetFocus;
end;
if connected = false
then begin
MessageDlg('
Sie müssen erst eine IP-Adresse eingeben und eine Verbindung mit dem Server aufbauen!', mtInformation, [mbok], 0);
Edit3.SetFocus;
end;
end;
Der Server macht dan folgendes mit den empfangenen Nachrichten:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var startwert, connections: integer;
text: String;
begin
startwert := 0;
{ Diese Variable ist einfach für die while-Schleife }
connections := ServerSocket1.Socket.ActiveConnections;
{ Zählt die verbundenen Clients, auch für die while-Schleife }
text := Socket.ReceiveText;
{ Hier wird einfach der empfangene Text in der Variable gespeichert }
Memo1.Lines.Add(text);
{ Der Text wird beim Server ins Memo kopiert }
while startwert < connections do
begin
ServerSocket1.Socket.Connections[startwert].SendText(text);
inc(startwert);
end;
{ Das ist das wichtigste! }
end;
Der Client widerum macht mit empfangenem Text folgendes:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
Damit bekommt jeder den Text einmal und niemand doppelt! Ich hoffe das hat dir etwas geholfen!
MfG Matthias Volland