Composant Indy

Composant Indy - Delphi/Pascal - Programmation

Marsh Posté le 23-08-2004 à 11:35:51    

Bonjour,
 
Débutant en Delphi 7, je souhaite réaliser une liaison de type chat entre 2 PC, en utilisant les composants TIdTelnetServer et TIdTelnetClient.
 
J'ai un memo qui affiche les caractères reçus, et un autre où je tape les caractères à envoyer.
 
Pour la réception, la ligne de code, dans la procédure Execute est:
 
memo1.Text:=memo1.Text+athread.Connection.ReadChar;  
 
La réception marche bien, mais pas l'émission, car le programme attend indéfiniment des datas (du moins je crois). Si je supprime cette ligne, l'émission du serveur vers client fonctionne bien.
 
Comment faire pour attraper les caractères "au vol", vu qu'il n'y a pas d'évènement du genre OnReceiveData ?
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 23-08-2004 à 11:35:51   

Reply

Marsh Posté le 24-08-2004 à 13:22:46    

Il faut trouver la méthode qui indique le nombre de caractères en attente de lecture et n'appeler "ReadChar" que s'il y a au moins un caractère à lire...

Reply

Marsh Posté le 24-08-2004 à 18:29:24    

Oui, j'y ai bien pensé, mais je n'ai trouvé aucune méthode qui permette de savoir si le buffer de réception est vide ou non.
 
Merci quand même pour la réponse.

Reply

Marsh Posté le 24-08-2004 à 23:25:08    

Je suis pas sûr que telnet soit le meilleur choix pour ça...
Un simple serveur TCP ne serait pas mieux ?  


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-08-2004 à 19:05:21    

Certes, je vais essayer le simple serveur TCP (le protocole de communication peut-il y être pour quelque chose dans un simple échange de caractères?).  
 
Merci.

Reply

Marsh Posté le 30-08-2004 à 11:16:12    

Salut
Ece qu'on pourrait m'expliquer la différence entre les composants Tcpclient et Tcpserver de l'onglet Indy à celui d'Internet.
 
Merci  :jap:  @+

Reply

Marsh Posté le 31-08-2004 à 10:36:36    

Ceux de l'onglet Internet sont assez anciens et fournis avec Delphi depuis un bout de temps. Il s'agit d'une encapsulation des sockets Windows.
Ceux d'Indy sont plus récents (fournis avec Delphi depuis la version 6 seulement). Je ne sais pas quelle est la différence par rapport aux autres, mais ils sont peut-être un peu plus évolués (et s'ils ne le sont pas, ils servent juste de base aux autres composants Indy).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-09-2004 à 19:08:07    

Effectivement, je n'ai pas trouvé un moyen de connaitre la taille des données reçues.  
Donc quelqu'un connait il un moyen de n'appeler la fonction de lecture que  lorsqu'il y'a quelque chose à lire ?
 
edit:  
bon bah j'ai trouvé en fait [:joce]

Code :
  1. while not FTerminated do
  2.       begin
  3.          tmp := FTCP.ReadLn('', 5);
  4.          application.processmessages;
  5.          if tmp <> '' then
  6.             begin
  7.                do_dbg (tmp);
  8.                // mettre ici votre code
  9.             end;
  10.       end;


 
bon je ne suis pas sur de la qualité du code, mais cela à le mérite de fonctionner et on retrouve le morceau complet dans les démos qui sont sur le site des composants indy.
Par contre, eux ne font pas de boucle mais utilise un timer qui déclenche la lecture toute les 500ms ce qui je suppose doit etre plus propre non ?


Message édité par cedcox le 05-09-2004 à 20:29:16

---------------
Les hommes se trompent, les preuves elles, ne mentent jamais...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed