OVH Cloud OVH Cloud

SOCKET EN MODE RAW

5 réponses
Avatar
Chris
Salut,

Je cherche un exemple ou un module pour
lire un socket en mode raw
J'utilise deja un serveur TCP/IP mais en mode ligne
et je souhaite pouvoir recupere chaque touche
comme telnet afin de developper un client spécifique capable de reagir
sur chaque touche.
Comme TERM::ReadKey par exmepl mais sur une socket
Est ce possible ?

A+
chris

5 réponses

Avatar
Nicolas George
Chris wrote in message <432e7697$0$17548$:
Je cherche un exemple ou un module pour
lire un socket en mode raw


Pendant un instant, j'ai cru qu'il était vraiment question d'une socket raw,
du style SOCK_RAW...

J'utilise deja un serveur TCP/IP mais en mode ligne
et je souhaite pouvoir recupere chaque touche
comme telnet afin de developper un client spécifique capable de reagir
sur chaque touche.
Comme TERM::ReadKey par exmepl mais sur une socket
Est ce possible ?


Il n'y a pas de mode cooked/raw sur une socket, ce n'est pertinent que pour
un terminal. Si on ne veut lire qu'un octet sur une socket, on fait un read
de 1 (ou on met $/ à 1) et on a un octet.

Évidemment, ça suppose que le client envoie les touches une par une, donc
que lui-même lise ses entrées touche par touche, avec Term::ReadKey par
exemple.

Avatar
Chris
Salut,

Merci pour la réponse
Nicolas George wrote:
Chris wrote in message <432e7697$0$17548$:

Je cherche un exemple ou un module pour
lire un socket en mode raw



Pendant un instant, j'ai cru qu'il était vraiment question d'une socket raw,
du style SOCK_RAW...


J'utilise deja un serveur TCP/IP mais en mode ligne
et je souhaite pouvoir recupere chaque touche
comme telnet afin de developper un client spécifique capable de reagir
sur chaque touche.
Comme TERM::ReadKey par exmepl mais sur une socket
Est ce possible ?



Il n'y a pas de mode cooked/raw sur une socket, ce n'est pertinent que pour
un terminal. Si on ne veut lire qu'un octet sur une socket, on fait un read
de 1 (ou on met $/ à 1) et on a un octet.

Évidemment, ça suppose que le client envoie les touches une par une, donc
que lui-même lise ses entrées touche par touche, avec Term::ReadKey par
exemple.


Pas d'exemple de source sur le net ?

A+
chris


Avatar
Nicolas George
Chris wrote in message <432fb403$0$9446$:
Pas d'exemple de source sur le net ?


Si, voilà un exemple :

read $socket, $buffer, 1;

Et en voici un autre :

$/ = 1;
my $octet = <$socket>;

C'était vraiment difficile, n'est-ce pas ?

Avatar
Chris
Nicolas George wrote:
Chris wrote in message <432fb403$0$9446$:

Pas d'exemple de source sur le net ?



Si, voilà un exemple :

read $socket, $buffer, 1;

Et en voici un autre :

$/ = 1;
my $octet = <$socket>;

C'était vraiment difficile, n'est-ce pas ?


Non mais j'avais déjà essayé mais je ne disposais des caractères
que si l'on tapait sur <ENTER/CR/ENTREE...>

Ce que je cherchais a faire c'est

PERL> perl mon_bo_serveur.pl
17:07:10|SERVEUR PID = 40296
17:07:10|Server SERVEUR accepting clients : Port 1200 : Pid 40296

voila pour le serveur ...

De l'autre coté :

telnet SERVEUR 1200
Bonjour ...



<je tape sur F1 sans faire ENTREE ou RETURN>

et le serveur me reponds

vous avez tapez sur F1

mais bon promis je re essaye
Merci
A+
chris


Avatar
Nicolas George
Chris wrote in message <43380cef$0$18850$:
De l'autre coté :

telnet SERVEUR 1200
Bonjour ...




Eh bien, si tu relis mon message attentivement, tu te rends compte que le
problème est au niveau du *client*. C'est telnet qui n'envoie les touches
que ligne par ligne, tu n'as aucune chance de faire quelque chose dans le
serveur pour rétablir l'interactivité qui n'existe pas.

Maintenant, si le client est vraiment telnet, alors la solution est dans
<URL: ftp://ftp.rfc-editor.org/in-notes/rfc495.txt > : il est possible de le
faire passer en mode caractère par caractère. Mais c'est pénible.