Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb avec le module Net::Telnet

5 réponses
Avatar
p_geni...
Bonjour,

j'ai un petit pb avec la fonction get du module Net::Telnet

cette fonction permet de lire des données à partir d'une machine distante.
Mon problème est le suivant:
les blocs lus sont souvent incomplets ou tronqués et ne contiennent pas
les \r\n pour signaler la fin des blocs.

voici une partie du code:

use Net::Telnet;
use strict;
use warnings;

my ($socket, $a, $r);


$socket = new Net::Telnet (Timeout => 10,
Prompt => '/bash\$ $/',
Host => 'serveur',
Port => 1199);


$socket->autoflush(1);

$a = 'commande qui retrourne un bloc long';

$socket->print($a);
$r = $socket->get();

print $r;


existe-t-il une autre commande permettant de lire les blocs
de données entièrement?
Je ne connais pas, à priori, la taille des blocs retournés et suis prêt à
utiliser un autre module
si celui-ci permet de résoudre mon pb.

Merci de votre aide.
Pierre.


-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

5 réponses

Avatar
DoMinix
Bonjour,
...

$a = 'commande qui retrourne un bloc long';

$socket->print($a);
$r = $socket->get();

print $r;



et qu'est ce qu'il y a/y a pas/devrait y avoir/ dans $r ?

existe-t-il une autre commande permettant de lire les blocs
de données entièrement?


$socket->getlines ?

Je ne connais pas, à priori, la taille des blocs retournés et suis prêt à
utiliser un autre module
si celui-ci permet de résoudre mon pb.



connais pas encore le probleme, mais dans la famille connect a distance
je demande Expect. (pioche !)


Merci de votre aide.
Pierre.


--
dominix

Avatar
p_geni...
DoMinix wrote:

$r = $socket->get();


et qu'est ce qu'il y a/y a pas/devrait y avoir/ dans $r ?


la variable $r devrait contenir la réponse de la machine distante
c'est une chaine de caractère assez longue


$socket->getlines ?


Je viens d'essayer cette commande les blocs ne sont pas lus entièrement
même en plaçant $socket->getlines dans une boucle
while :

while(1) {
@a = $socket->getlines or last;
push @aa, @a;
}

Merci de cette réponse.
Pierre.
-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/


Avatar
DoMinix
DoMinix wrote:
...


$socket->getlines ?



Je viens d'essayer cette commande les blocs ne sont pas lus entièrement
même en plaçant $socket->getlines dans une boucle
while :



et avec :
$socket->getlines(All => 1)

--
dominix


Avatar
p_geni...
DoMinix wrote:

et avec :
$socket->getlines(All => 1)


Bonjour,

j'ai toujours un pb même avec la fonction getlines et l'option All=>1
le socket est "bloqués" pas de flux de données et puis un time out.

Je vais chercher dans le code source du module Net::SMTP par exemple pour
comment il procèdent pour lire des mails de big taille.


Pierre.

-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

Avatar
p_geni...
DoMinix wrote:

et avec :
$socket->getlines(All => 1)


Je viens de résoudre le PB en utilisant le module Net::Cmd et la methode
read_until_dot de ce module.


Merci.

Pierre.
-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/