Question

J'ai un démon Solaris écrit en java6. Les clients peuvent se connecter à l'aide d'une interface de style telnet. Ils telnet à un port particulier, et je lis les lignes d'entrée et d'agir sur eux.

À un moment donné, je dois demander à l'utilisateur d'entrer un mot de passe, et pendant qu'ils l'entrée que je veux désactiver l'écho des caractères au client telnet.

Le code a un objet Socket et crée un InputStream du résultat getInputStream () de prise, puis lit et caractères tampons du InputStream, en les brisant sur les limites de cr / lf.

Je ne vois pas tous les attributs de chaque InputStream ou le Socket pour désactiver l'écho des caractères au client.

Quelqu'un peut me pousser dans la bonne direction?

Était-ce utile?

La solution

On dirait que vous devez construire un terminal simple réseau virtuel qui prend en charge les pas d'écho des commandes etc. Il y a déjà une bonne réponse, vous devez vous référer à le SO: serveur Telnet

Autres conseils

Vous devez comprendre où l'écho vient. les connexions TCP et InputStreams java ne fournissent pas d'écho sur leur propre. Le programme telnet que l'utilisateur exécute commence normalement en mode « écho local », ce qui signifie qu'elle fait écho à tout tapé par l'utilisateur à l'écran de l'utilisateur. Lorsque le client telnet se connecte à un serveur telnet réel, il négocie généralement le mode « d'écho à distance » dans ce cas, le système distant fournit l'écho. Lorsque telnet se connecte à quelque chose d'autre, comme un serveur HTTP ou SMTP, il reste juste 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 facile à utiliser pour demander aux utilisateurs de le faire. Comme autre réponse dit, si vous voulez passer en écho sur et en dehors, vous devrez améliorer votre serveur pour supporter le protocole Telnet, puis négocier écho à distance avec les clients.

Si vous faites cela, vous rencontrerez également la question de la ligne-à-un-temps par rapport à caractère par caractère à temps. Telnet démarre en ligne au-un-temps en mode. Il honore les clés d'édition de ligne comme backspace localement et envoie uniquement la ligne au serveur lorsque l'utilisateur clique retour. Si vous faites écho à distance, alors vous devez faire l'écho des caractères que les types d'utilisateurs eux, pas après qu'il frappe le retour. Donc, vous devez appuyer caractère par caractère à temps et mettre en œuvre l'édition de ligne dans le serveur.

Vous devriez examiner attentivement le programme du serveur telnet sur votre serveur hôte. Il pourrait être possible d'utiliser le serveur telnet existant comme frontend pour votre programme, plutôt que réimplémentant tout ce qu'il fait. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top