1

Java6 で書かれた Solaris デーモンがあります。クライアントは、telnet スタイルのインターフェースを使用して接続できます。彼らは特定のポートに telnet で接続し、私は入力行を読み取り、それに基づいて行動します。

ある時点で、ユーザーにパスワードの入力を求める必要があり、パスワードを入力している間は、telnet クライアントへの文字のエコーを無効にしたいと考えています。

コードには Socket オブジェクトがあり、ソケットの getInputStream() の結果から InputStream を作成し、InputStream から文字を読み取ってバッファリングし、cr/lf 境界で分割します。

クライアントへの文字のエコーバックを無効にするために、InputStream または Socket のいずれにも属性が表示されません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

4

no echo などのコマンドをサポートする単純なネットワーク仮想端末を構築する必要があるようです。SO で参照する必要がある適切な回答が既にあります: Telnet サーバー

于 2008-12-15T07:23:43.677 に答える
2

エコーがどこから来ているかを理解する必要があります。TCP 接続と Java InputStreams は、単独ではエコーを提供しません。ユーザーが実行する telnet プログラムは通常、「ローカル エコー」モードで開始されます。つまり、ユーザーが入力したすべての内容がユーザーの画面にエコーされます。telnet クライアントが実際の telnet サーバーに接続するとき、一般的に「リモート エコー」モードをネゴシエートします。この場合、リモート システムがエコーを提供します。telnet が HTTP や SMTP サーバーなどの他のものに接続する場合、ローカル エコー モードのままになります。

ユーザーはクライアントでローカル エコーをオフにするコマンドを発行できますが、ユーザーにそれを要求するのはあまりユーザー フレンドリーではありません。他の答えが言うように、エコーのオンとオフを切り替えたい場合は、telnet プロトコルをサポートするようにサーバーを強化してから、クライアントとリモート エコーをネゴシエートする必要があります。

これを行うと、一度に 1 行と 1 文字という問題も発生します。Telnet は行単位モードで開始します。バックスペースなどの行編集キーをローカルで受け入れ、ユーザーがリターンを押したときにのみ行をサーバーに送信します。リモートエコーを行っている場合は、ユーザーがリターンを押した後ではなく、ユーザーが入力したときに文字をエコーする必要があります。そのため、一度に文字をサポートし、サーバーで行編集を実装する必要があります。

サーバー ホスト上の telnet サーバー プログラムを詳しく調べる必要があります。すべての機能を再実装するのではなく、既存の telnet サーバーをプログラムのフロントエンドとして使用できる可能性があります。幸運を。

于 2009-02-22T14:50:59.697 に答える