Indy savoir le nombre de readln a faire ... [Résolu]

cs_cyber37 111 Messages postés mardi 25 octobre 2005Date d'inscription 19 novembre 2010 Dernière intervention - 26 avril 2008 à 09:36 - Dernière réponse : cs_cyber37 111 Messages postés mardi 25 octobre 2005Date d'inscription 19 novembre 2010 Dernière intervention
- 27 avril 2008 à 12:41
Salut a tous,
Je suis en train de refaire un programme en se moment mais je suis un peut embetter, je doit utiliser un socket BLOQUANT (obliger), j'ai donc utiliser indy, en faite sa me permetras de gerer un serveur de jeux a distance, la pluspar des commandes sonts faites car ces commandes une fois envoiller (donc writeln) necessitent 1 seul readln ... maintenant j'ai d'autres commandes un peut plus embettantes auxquelles je ne peut pas savoir combient de ligne le serveur renveras donc combient de readln je devrais faire ... meme apres avoir poser le composants de la palette indy pour pas bloquer les aplications je suis embetter puisque quand on stope le programme sa provoque 5 erreurs ...
Car si je fait 1 readln en trop sa rame bien plus !

Donc je voulais savoir si il y a une commande pour savoir le nombre de ligne que le serveur a envoiller avant de faire un readln (si yen a trois par exemple, ma procedure feras 3 readln ...) j'ai deja essailler de faire avec le reglages "connexion time out" de indy client TCP mais sa provoque un message "connexion time out"  mais au moin sa amrche mais voila ya un message ...

Donc voila,
Cordialement cyber37
@+
Et merci.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
OcHre 46 Messages postés mercredi 23 mars 2005Date d'inscription 26 avril 2008 Dernière intervention - 26 avril 2008 à 11:56
3
Merci
Salut,

si tu veux éviter l'apparition de messages d'erreur pense à utiliser les bloques


try

...

except

...

finally


qui te permettront de réagir (ou pas) suivant les erreurs générées.
Sinon une solution envisageable est tout simplement d'envoyer le nombre
de lignes à lire avant de les envoyer. Enfin juste une remarque, les
composants indy étants bloquants font toujours plus ou moins ramer
l'application cliente donc si tu veux les implémenter pour un jeu tu
as, à mon avis, tout interet à le faire dans un thread.

Rions un peu en attendant la mort.

Merci OcHre 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de OcHre
Meilleure réponse
OcHre 46 Messages postés mercredi 23 mars 2005Date d'inscription 26 avril 2008 Dernière intervention - 26 avril 2008 à 14:23
3
Merci
Désolé je n'avais pas compris que le serveur existait déjà, puisque tu
es assujetti à un protocole la solution la plus fluide reste à mon avis
la création de ton client dans un thread, si tu n'as jamais utilisé les
threads il y a un trés bon tutorial sur ce site:

http://www.delphifr.com/tutorial.aspx?id=231


L'utilisation de threads peut paraître un peu déroutante au début mais
est à mon avis indispensable quand tu utilises les composants indy et à
plus forte raison si tu ne maîtrise pas la structure des paquets. Pour
ce qui est de Try..Except..Finally rien ne t'empeches de gérer les
erreurs et de réagir en fonction de celles-ci.

Rions un peu en attendant la mort.

Merci OcHre 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de OcHre
cs_cyber37 111 Messages postés mardi 25 octobre 2005Date d'inscription 19 novembre 2010 Dernière intervention - 26 avril 2008 à 13:25
0
Merci
En faite le serveur de jeux existe deja !  Et le jeu aussi dailleur c'est BF 2142 et oui en effet sa rame au debut quand toute mes procedures demandent les reponses genre une qui demande a combien est regler le feu amis, une autre demande a combien est regler le ... mais apres sa vas.

Merci de ta reponse, pour l'instant je vais la garder mais j'atted voir s'il y a d'autre reponses car toi ta reponse me vas mais sa vas juste "cacher le message d'erreur" par exemple. Pour l'instant j'attend voir s'il y a d'autres reponses et s'il n'y en a pas je ferais a ta fason.  En gros je ferais le systeme avec le readtimeout et avec ton code sa n'afficheras pas le message "connexion time out" .. .
Si non merci de ta reponse, PS j'ai trouver sa sur le net :

   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.
  11.       end;

mais a parement sa c'est pas pour indy, en faite se bout de code il est bien le seul probleme c'est de savoir si il y a la fonction "Terminated" avec le client TCP indy :-)
Je vasi essailler de voir d'ailleur, ou alors s'il y a un equivalent
Commenter la réponse de cs_cyber37
cs_cyber37 111 Messages postés mardi 25 octobre 2005Date d'inscription 19 novembre 2010 Dernière intervention - 27 avril 2008 à 12:41
0
Merci
Merci beaucoup, topic clos :-),
En effet je n'avais jamais utiliser les theards, mais en revanche "try except et finally" oui.

Au revoir et merci beaucoup.
Commenter la réponse de cs_cyber37

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.