Bonjour, voilà je suis en train de créer un chat réseau dans le cadre de mes études.
Sur une même form je place mon socket serveur et mon socket client. Ainsi avec le même exe, on peut jouer le rôle de client ou de serveur.
Pour mes tests, je lance 3 fois mon exe :
_ 1 serveur
_ 2 clients
La connexion entre eux se fait trés bien : je met le port de connexion sur 2000 (par exemple) et l'adresse IP sur laquelle les clients se connectent 127.0.0.1. Jusque là c'est logique.
Le principe de ce chat est :
_ un client envoie un message au serveur.
procedure TForm2.EnvoieBtnClick(Sender: TObject);
begin
with form2 do
begin
if ZoneFrappe.Text<>'' then
begin
ClientSocket1.Socket.SendText(ZoneFrappe.Text);
ZoneFrappe.Text:='';
end;
end;
end;
_ le serveur reçoit le message et le renvoie à tous les clients connectésprocedure TForm2.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i : integer;
begin
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
begin
ServerSocket1.Socket.Connections[i].SendText(Socket.ReceiveText);
showmessage('message envoyé!');
end;
end;
_ chaque client reçoit le message qui est affiché dans un memo.
procedure TForm2.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Champ.Lines.add(Clientsocket1.Socket.ReceiveText);
showmessage('Message reçu!');
end;
Mais dans mes tests seul un client reçoit le message, alors que le serveur l'a bien envoyé 2 fois.
Je m'étais dit que cela pouvait venir du fait que tout était fait en local, mais même aprés avoir testé en mettant un client sur une machine virtuel ça fait la même chose.
Si vous pouviez m'aider, un grand MERCI!