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

Messages postés
111
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
19 novembre 2010
- - Dernière réponse : cs_cyber37
Messages postés
111
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
19 novembre 2010
- 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
Messages postés
46
Date d'inscription
mercredi 23 mars 2005
Dernière intervention
26 avril 2008
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de OcHre
Messages postés
46
Date d'inscription
mercredi 23 mars 2005
Dernière intervention
26 avril 2008
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de OcHre
Messages postés
111
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
19 novembre 2010
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
Messages postés
111
Date d'inscription
mardi 25 octobre 2005
Dernière intervention
19 novembre 2010
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.