2008-12-15 5 views
1

J'ai un démon Solaris écrit en Java6. Les clients peuvent s'y connecter en utilisant une interface de type telnet. Ils se connectent à tel ou tel port, et je lis les lignes d'entrée et j'agis sur eux.Désactiver l'écho de caractères sur la connexion réseau Java

À un moment donné, je dois demander à l'utilisateur d'entrer un mot de passe, et pendant la saisie, je souhaite désactiver l'écho des caractères sur le client telnet.

Le code a un objet Socket et crée un InputStream à partir du résultat getInputStream() du socket, puis lit et met en mémoire tampon les caractères de l'InputStream, en les décomposant sur les limites cr/lf.

Je ne vois aucun attribut sur l'InputStream ou le Socket pour désactiver l'écho des caractères vers le client.

Quelqu'un peut-il me pousser dans la bonne direction?

Répondre

4

Il semble que vous ayez besoin de construire un simple terminal réseau virtuel prenant en charge les commandes no echo etc. Il y a déjà une bonne réponse à laquelle vous devriez vous référer sur SO: Telnet Server

+0

Vous êtes sur, Chris. Le RFC éclaircit beaucoup. Je prenais une vue très simplifiée de telnet; la mise en œuvre comme une NVT appropriée devrait accomplir ce que je veux. Merci. – Andrew

2

Vous devez comprendre d'où vient l'écho. Les connexions TCP et InputStreams java ne fournissent pas d'écho par eux-mêmes. Le programme telnet que l'utilisateur exécute normalement démarre en mode "écho local", ce qui signifie qu'il renvoie tout ce que l'utilisateur a tapé sur l'écran de l'utilisateur. Lorsque le client telnet se connecte à un serveur telnet réel, il négocie généralement le mode "écho distant", auquel cas le système distant fournit l'écho. Lorsque telnet se connecte à autre chose, comme un serveur HTTP ou SMTP, il reste simplement en mode écho local.

L'utilisateur peut émettre une commande pour désactiver l'écho local dans le client, mais il ne serait pas très convivial d'exiger que vos utilisateurs le fassent. Comme le dit l'autre réponse, si vous voulez activer et désactiver l'écho, vous devrez améliorer votre serveur pour prendre en charge le protocole telnet, puis négocier l'écho distant avec les clients.

Si vous faites cela, vous rencontrerez également le problème de la ligne à la fois par rapport à caractère-à-la-fois. Telnet démarre en mode ligne-à-heure. Il respecte les touches d'édition de ligne, telles que le retour arrière, et n'envoie la ligne au serveur que lorsque l'utilisateur renvoie le résultat. Si vous effectuez un écho à distance, vous devez renvoyer des caractères lorsque l'utilisateur les tape, et non après qu'il a renvoyé le résultat. Vous devrez donc prendre en charge le caractère à la fois et implémenter la modification de ligne dans le serveur.

Vous devez examiner de près le programme du serveur telnet sur votre hôte serveur. Il peut être possible d'utiliser le serveur Telnet existant en tant que frontal pour votre programme, plutôt que de réimplémenter tout ce qu'il fait. Bonne chance.

Questions connexes