undzwar habe ich ein Netzwerk internes Chat programm gebaut.
Nun die Frage...
alles läuft eigentlich super... Der server empfängt alle nachrichten die der / DIE clients senden...
nun würde ich gerne noch einbauen das alle Clients die nachricht von einem Client sehen...
Sprich
Client 1 sendet nachricht an -> server & andere Clients
Ist das möglich? Wenn ja bitte um hilfe...
hier mein Code vom Server:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, lNetComponents, Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls, lNet;
type
{ TForm1 }
TForm1 = class(TForm)
btnServerAktivieren: TButton;
btnServerDeaktivieren: TButton;
btnSenden: TButton;
Button1: TButton;
Button2: TButton;
edNachricht: TEdit;
Label1: TLabel;
LabeledEdit1: TLabeledEdit;
Memo1: TMemo;
Server: TLTCPComponent;
procedure btnSendenClick(Sender: TObject);
procedure btnServerAktivierenClick(Sender: TObject);
procedure btnServerDeaktivierenClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Memo1DblClick(Sender: TObject);
procedure ServerAccept(aSocket: TLSocket);
procedure ServerDisconnect(aSocket: TLSocket);
procedure ServerError(const msg: string; aSocket: TLSocket);
procedure ServerReceive(aSocket: TLSocket);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.btnServerAktivierenClick(Sender: TObject);
var
Port : Integer;
ServerIP : String;
Verbindungsaufbau : boolean;
begin
Port := StrToInt(LabeledEdit1.Text);
Verbindungsaufbau := Server.Listen(Port);
memo1.Append ('Server erwartet Verbindungen!');
end;
procedure TForm1.btnServerDeaktivierenClick(Sender: TObject);
begin
Server.Disconnect(true);
Memo1.append ('Server wurde deaktiviert');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
server.IterReset;
while server.IterNext do
begin
Memo1.Append(server.Iterator.localAddress);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.Memo1DblClick(Sender: TObject);
var ClientIP : String;
sendetext : String;
begin
if edNachricht.Text = '' then
begin
showmessage('Bitte erst nachricht eingaben');
end
else
sendetext := edNachricht.Text;
ClientIP := Memo1.seltext;
server.IterReset;
while server.IterNext do
if (ClientIP = server.Iterator.localAddress) then
server.Sendmessage(edNachricht.Text,Server.Iterator);
end;
procedure TForm1.btnSendenClick(Sender: TObject);
var sendetext : String;
begin
sendetext := edNachricht.Text;
if (sendetext <> '') then
begin
Server.IterReset;
while (Server.IterNext = True) do
Server.SendMessage(sendetext,server.Iterator);
end;
end;
procedure TForm1.ServerAccept(aSocket: TLSocket);
begin
Memo1.append('Verbindung zum Client mit der IP: ' + aSocket.LocalAddress + ' wurde hergestellt');
end;
procedure TForm1.ServerDisconnect(aSocket: TLSocket);
begin
Memo1.append('Verbindung zum Client wurde getrennt');
end;
procedure TForm1.ServerError(const msg: string; aSocket: TLSocket);
begin
Memo1.Append('Fehlermedung:' + msg);
end;
procedure TForm1.ServerReceive(aSocket: TLSocket);
var Eingangstext : String;
begin
aSocket.GetMessage(Eingangstext);
Memo1.Append ('Eingehende Nachricht von IP ' + aSocket.localAddress + ': ' + Eingangstext);
end;
end.
und hier der code vom Client:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, lNetComponents, Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls, lNet;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Client: TLTCPComponent;
Edit2: TEdit;
Edit3: TEdit;
LabeledEdit1: TLabeledEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientConnect(aSocket: TLSocket);
procedure ClientDisconnect(aSocket: TLSocket);
procedure ClientError(const msg: string; aSocket: TLSocket);
procedure ClientReceive(aSocket: TLSocket);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var Port : integer;
ServerIP : String;
Verbindungsaufbau : boolean;
begin
Port := StrToInt(LabeledEdit1.Text);
ServerIP := Edit2.Text;
Verbindungsaufbau := Client.Connect(ServerIP,Port);
if Verbindungsaufbau then
Memo1.Append('Die Verbindung wird aufgebaut. . .');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
client.Disconnect(true);
Memo1.Append('Die Verbindung zum Server wurde getrennt!');
end;
procedure TForm1.Button3Click(Sender: TObject);
var sendetext : String;
begin
sendetext := Edit3.Text;
if (sendetext <> '') then
begin
Client.IterReset;
Client.SendMessage(sendetext,client.Iterator);
end;
end;
procedure TForm1.ClientConnect(aSocket: TLSocket);
begin
Memo1.append ('Verbindung zum Server mit der IP: ' + aSocket.LocalAddress +' wurde hergestellt');
end;
procedure TForm1.ClientDisconnect(aSocket: TLSocket);
begin
memo1.append ('Verbindung zum Server wurde getrennt');
end;
procedure TForm1.ClientError(const msg: string; aSocket: TLSocket);
begin
Memo1.Append('Fehlermeldung: ' + msg);
end;
procedure TForm1.ClientReceive(aSocket: TLSocket);
var Eingangstext : String;
begin
aSocket.GetMessage(Eingangstext);
Memo1.Append ('Eingehende Nachricht von IP ' + aSocket.localAddress + ': ' + Eingangstext);
end;
end.
Lg Homer