lnet serveur multi clients
Bonjour, voilà mon problème : j'ai deux prog clients identiques mais sur deux ports différents, et un serveur avec deux ports.
Si je mets le même port sur les deux clients, le serveur reçoit bien les deux clients, mais il envoie uniquement au premier.
Si je mets un port différent aux deux clients, le serveur reçoit uniquement le premier mais il envoie aux deux.
Donc forcément l'idee c'est de pouvoir envoyer et recevoir sur les deux.
Je fournis les deux applis en CODE, merci d'avance pour l'aide...
CLIENT :
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, lNet, Graphics, Dialogs, StdCtrls,
ExtCtrls, lNetComponents;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
BoutonEnvoyer: TButton;
Button2: TButton;
Edit1: TEdit;
AdresseIP: TEdit;
Port: TEdit;
Label1: TLabel;
Label2: TLabel;
TCP: TLTCPComponent;
Memo1: TMemo;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure BoutonEnvoyerClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1EditingDone(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TCPDisconnect(aSocket: TLSocket);
procedure TCPError(const msg: string; aSocket: TLSocket);
procedure TCPReceive(aSocket: TLSocket);
procedure Timer1Timer(Sender: TObject);
private
public
fnet:TLconnection;
end;
var
Form1: TForm1;
implementation
uses
lCommon;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
fnet:=TCP;
TCP.SocketNet:=LAF_INET;
end;
procedure TForm1.TCPDisconnect(aSocket: TLSocket);
begin
aSocket:=nil;
memo1.Lines.add('disconnct');
end;
procedure TForm1.TCPError(const msg: string; aSocket: TLSocket);
begin
aSocket:=nil;
memo1.Lines.add('error '+ msg);
end;
procedure TForm1.TCPReceive(aSocket: TLSocket);
var
s:string;
begin
aSocket.GetMessage(s);
memo1.Lines.add('server : '+ s);
if s='stop' then timer1.Enabled:=false;
if s='start' then timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var jour:string;
begin
if dayofweek(Now)=2 then jour:='Lundi';
if dayofweek(Now)=3 then jour:='Mardi';
if dayofweek(Now)=4 then jour:='Mercredi';
if dayofweek(Now)=5 then jour:='Jeudi';
if dayofweek(Now)=6 then jour:='Vendredi';
if dayofweek(Now)=7 then jour:='Samedi';
if dayofweek(Now)=1 then jour:='Dimanche';
fnet.SendMessage('CLIENT1 : '+jour+' '+FormatDateTime('DD MM YYYY hh:nn:ss',now));
memo1.Lines.add('client : ' + jour+' '+FormatDateTime('DD MM YYYY hh:nn:ss',now));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
fnet.Connect(AdresseIP.text,strtoint(Port.Text));
memo1.Lines.add('connected');
end;
procedure TForm1.BoutonEnvoyerClick(Sender: TObject);
begin
fnet.SendMessage(edit1.text);
memo1.Lines.add('client : ' + edit1.text);
edit1.text:='';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if timer1.Enabled=false then
begin
timer1.Enabled:=true;
end else
begin
timer1.Enabled:=false;
end;
end;
procedure TForm1.Edit1EditingDone(Sender: TObject);
begin
BoutonEnvoyer.Click;
end;
end. |
SERVEUR :
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms,lNet, Controls, Graphics, Dialogs, StdCtrls,
lNetComponents;
type
{ TForm1 }
TForm1 = class(TForm)
BoutonRecevoir: TButton;
BoutonEnvoyer: TButton;
Memo2: TMemo;
Port: TEdit;
Edit2: TEdit;
Label1: TLabel;
LTCP: TLTCPComponent;
LTCP2: TLTCPComponent;
Memo1: TMemo;
Port2: TEdit;
procedure BoutonRecevoirClick(Sender: TObject);
procedure BoutonEnvoyerClick(Sender: TObject);
procedure Edit2EditingDone(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure LTCPDisconnect(aSocket: TLSocket);
procedure LTCPError(const msg: string; aSocket: TLSocket);
procedure LTCPReceive(aSocket: TLSocket);
procedure LTCP2Disconnect(aSocket2: TLSocket);
procedure LTCP2Error(const msg: string; aSocket2: TLSocket);
procedure LTCP2Receive(aSocket2: TLSocket);
private
public
fnet:TLconnection;
fnet2:TLconnection;
end;
var
Form1: TForm1;
implementation
uses
lCommon;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
fnet:=LTCP;
LTCP.SocketNet:=LAF_INET;
fnet2:=LTCP2;
LTCP2.SocketNet:=LAF_INET;
end;
procedure TForm1.LTCPDisconnect(aSocket: TLSocket);
begin
memo1.lines.add('disconnected ');
end;
procedure TForm1.LTCPError(const msg: string; aSocket: TLSocket);
begin
memo1.lines.add('error : '+msg);
end;
procedure TForm1.LTCPReceive(aSocket: TLSocket);
var
s:string;
begin
aSocket.GetMessage(s);
memo1.lines.add('client : ' + s);
end;
procedure TForm1.LTCP2Disconnect(aSocket2: TLSocket);
begin
memo2.lines.add('disconnected2 ');
end;
procedure TForm1.LTCP2Error(const msg: string; aSocket2: TLSocket);
begin
memo2.lines.add('error2 : '+msg);
end;
procedure TForm1.LTCP2Receive(aSocket2: TLSocket);
var
s:string;
begin
aSocket2.GetMessage(s);
memo2.lines.add('client2 : ' + s);
end;
procedure TForm1.BoutonRecevoirClick(Sender: TObject);
begin
if fnet.Listen(strtoint(Port.Text))then
memo1.Lines.add('listning....');
if fnet2.Listen(strtoint(Port2.Text))then
memo2.Lines.add('listning2....');
end;
procedure TForm1.BoutonEnvoyerClick(Sender: TObject);
begin
fnet.SendMessage(edit2.text);
memo1.Lines.add('server : '+ edit2.Text);
fnet2.SendMessage(edit2.text);
memo2.Lines.add('server2 : '+ edit2.Text);
edit2.Text:='';
end;
procedure TForm1.Edit2EditingDone(Sender: TObject);
begin
if edit2.Text<>'' then BoutonEnvoyer.Click;
end;
end. |