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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.