Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de reception de texte avec TClientSocket [ Réseau & Internet / Client - Server ] (obitskater)

mercredi 14 mars 2007 à 12:18:26 | Probleme de reception de texte avec TClientSocket

obitskater

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és

procedure 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!

jeudi 15 mars 2007 à 09:04:59 | Re : Probleme de reception de texte avec TClientSocket

Francky23012301

Membre Club
Réponse acceptée !
Salut,

C'est normal que ca plante : l'erreur est içi

procedure 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;

Il se passe quoi :
Ton serveur recoit une donnée : la procédure ServerSocket1ClientRead se déclenche. Premier client, il recherche le texte recu (Socket.ReceiveText) puis l'envoye au client 0. Ensuite il passe au second client, il  recherche le texte recu (Socket.ReceiveText), mais la il recoit plus rien car le texte a déjà été recu donc il envoie rien du tout au client 1.

Voila la modification à faire

procedure TForm2.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
i : integer;
Mess:String;
begin
Mess:=ServerSocket1.Socket.ReceiveText;//Déjà première érreur de ta part
  for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
  begin
    ServerSocket1.Socket.Connections[i].SendText(Mess);
    showmessage('message envoyé!');//Inutile et dangereux : ce genre de chose est à éviter sauf pour réaliser un débeugage : en effet la fonction showmessage ne rend pas la main. Ensuite si tu as 5000 clients (ce qui n'est pas énorme), tu vas vite avoir mal au doigt. Le mieux est d'utiliser un ValueListEditor ou DBgrid ou mieux faire un fichier logs.
  end;
end;

Bon coding @+





jeudi 15 mars 2007 à 09:09:37 | Re : Probleme de reception de texte avec TClientSocket

obitskater

Merci beaucoup, en effet c'était un problème tout bête :s
Maintenant ça marche parfaitement!

Pour le ShowMessage, j'ai oublié de le virer pour ce post, mais en effet il ne me servait qu'à debugger pour voir combien de tours faisait la boucle For.

Merci bien ;)



Cette discussion est classé dans : message, serveur, client, socket, begin


Répondre à ce message

Sujets en rapport avec ce message

client serveur Socket avec API ?? [ par Hack_arab ] Salut je cherche un exemple en delphi de client/serveur socket avce API Client/serveur Socket avec API ?? [ par Hack_arab ] Salut je cherche un exemple en delphi de client/serveur socket avce API Client & Server Socket ! [ par Powa87 ] Lu all !Voila,j'ai une source avec un truc online basique client qui se connecte à un mec qui ouvre un serveur.Je travaille avec les socket fournis pa Erreur de socket TServerSocket [ par petronius ] Salut,je suis en train de faire un jeu en opengl (sans TForm), et je n'arrive pas a faire dialoguer la partie Client/Serveur, j'obtient un message d'e utilisation de tidtcpclient et tidtcpserver avec indy 10 et delphi 2005 [ par Mouffi ] Bonjour, j'ai rencontrés plusieurs problèmes lorsque je veux faire un client/serveur TCP avec les  derniers composants indy. Voici un extrait de mon c serveur et client socket [ par sarlcopib ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB serveur et client Socket [ par sarlcopib ] salut je suis nassim et je suis un débutant en delphi j'ai apris a faire des connection socket mais le probleme c que la connection <SPAN style="FONT- Faire communiquer deux PC via un socket [ par Francky23012301 ] Bon je connais le principe si je veux demande à un client de dire à un serveur d'effectuer une tache par exemple ouvrir l'horloge de windows On fait envoyer un OleVariant par socket [ par Rems ] Bonsoir à tous..j'ai besoin d'aide car je n'arrive pas passer un OleVariant (ClientDataSet.Data)  du client au serveur et vice versa utilisant les soc transmettre une variable [ par Francky23012301 ] Salut à tous Voila j'ai besoin de faire quelque chose. On m'a déja proposé une source mais elle convient pas totalement à mes besoins. Voila l'idée


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,17 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.