2011-08-08 28 views
0

内部ネットワークアプリケーション間の通信用のシンプルなTelnet接続デーモンを構築していて、BufferedReaderから最初の行を読み込むときに問題が発生しました。BufferedReaderストリームの最初の読み込み時のガベージ

このコードスニペットは、そこに他の迷惑メールがたくさんあるので完全ではありません。オブジェクトの作成とスチームからの読み込みだけを取り除きました。 telnet接続にtestを入力

in = new BufferedReader(new InputStreamReader(this.client.getInputStream())); 
out = new PrintWriter(this.client.getOutputStream(), true); 
String line; 

while (true) { 
    out.println(flag); // flag is just an integer    
    System.out.println(line); 
    // Processing the line and updating 'flag' accordingly 
} 

は、プログラムを実行しているコンソールで v? v  v? v' ²? v? ²?testを得ました。これは、最初の行の後に送信される行には発生しません。

最初の行で送信されないように、ユーザーがそのインターフェイスに入る前にそのゴミをクリアする方法はありますか?または私のtelnetクライアントによって引き起こされるこの問題です(これとインターフェイスするクライアントを書くと修正されるかもしれません)。

答えて

4

私はそれがテルネットプロトコルネゴシエーションだと強く思っています。理想的には、RFC 854を慎重に読んでください。

には、文字エンコーディングを指定せずにInputStreamReaderを使用しないでください。プラットフォームのデフォルトのエンコーディングがごくわずかです。

+0

私はそのプロトコルから何も利用していないので、あなたは正しいと思います。実際にはtelnetではなく、rawを使用していたはずです(実際にtelnetと呼ばれる理由はわかりません)。とにかく、私はそれを理解しました、ありがとう。 – SamT

+0

@SamT: '' telnet'は "普通のTCP/IP接続クライアント"としてよく使われますが、実際には非常に特殊なTelnetプロトコルのクライアントです(最近はあまり使われていません)。 –

+0

@ Joachim Sauer私はそれが「ほとんど使われていない」とは言いません。あなたはそこにあるコードの量に驚くでしょう。 TN3270と銀行バックエンド現時点では、プロダクションにTelnetクライアント/サーバーが組み込まれたシステムがあります。 – EJP

関連する問題