IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

IO::Socket / IO::Handle et prompt


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Par défaut IO::Socket / IO::Handle et prompt
    Bonjour,

    Je travaille sur un script qui permet de dispatcher l'analyse syntaxique de phrases sur plusieurs machines. Le but est que dès qu'une machine est libre, mon dispatcher lui envoie une phrase à analyser et je veux évidemment que les machines travaillent en même temps. Un serveur d'analyseurs tourne sur chacune des machines et le dispatcher se connecte en tant que client sur ces serveurs.

    J'utilise Event pour gérer les événements et le problème que j'ai eu est que l'utilisation de Net::Telnet pour la connexion aux serveurs entraine des opérations d'entrée/sortie bloquantes. A la place de Net::Telnet j'utilise donc directement IO::Socket, mais là problème: lorsque j'essaie de lire ce qui est renvoyé par le serveur sur mon filehandle, la lecture se bloque à la dernière ligne. Il se trouve que la dernière ligne renvoyée par le serveur de parser (ligne de prompt) correspond à ceci (dans le code du serveur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print MYSTDOUT "Command? ";
    Si dans mon dispatcher j'essaie d'imprimer ce qui est récupéré sur mon filehandle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (<$socket>) {
    	print $_;
    }
    Il affiche toutes les lignes sauf la dernière qui contient "Command? " et il semble attendre une fin de ligne qui n'arrive jamais... Il ne me renvoie pas la main.

    C'est le même problème si j'essaie d'imprimer avec $socket->getlines().

    Voilà mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $socket = IO::Socket::INET->new(Proto     => "tcp",
    				       PeerAddr  => $host,
    				       PeerPort  => $port
    	)
    	or die "can't connect to the server of parsers [$host:$port]";
     
    $socket->autoflush(1);
    $socket->send("help");
    Quelqu'un sait-il comment je peux gérer mon prompt ? Cela était facile avec Net::Telnet, qui fournit une commande prompt pour spécifier à quoi ressemble un prompt, mais ici je suis bloquée avec cette fin de ligne manquante.

    Cette solution semblait convenir (faire un $socket->print("GET /\015\012"); à la fin du filehandle), mais elle ne résoud pas mon problème.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Par défaut
    Eh bien mon problème n'est pas résolu, donc j'ai dû le contourner en ajoutant directement sur le serveur une ligne comportant <END_DATA> avant la ligne comportant le prompt sans fin de ligne. Ma chance est que je peux modifier le code du serveur.

    Si quelqu'un a une réponse au problème initial, merci de m'éclairer

Discussions similaires

  1. incrémentation de 3 handles à l'ouverture de socket
    Par lemarquisien dans le forum Web & réseau
    Réponses: 1
    Dernier message: 26/03/2009, 17h16
  2. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  3. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  4. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo