1

私はこの小さなテストソケット接続クラスを持っています:-

import java.net.Socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class TestTelnet {

public static void main(String args[]) throws Exception {
    Telnet telnet = new Telnet(); 
    Socket socket = null ;
    socket = new Socket("localhost", 23);
    socket.setKeepAlive(true);
    BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        BufferedWriter w = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    System.out.println(r.readLine());
    socket.close();
}
}

別のポート(SMTPの場合は25など)を使用すると完全に機能し、r.readLineのprintlnは見事に機能します。コマンドプロンプト(telnet localhost 23)を介してポート23に接続することもでき、次のメッセージが返されます。-

Ubuntu 8.10 my-laptopログイン:

しかし、Javaクラスを使用してポート23に接続しようとすると、readLineprintlnでハングします。なぜこれなのか誰か知っていますか?

4

4 に答える 4

3

これは、(CR または CRLF 終端を使用した) 行を期待しているのに、telnet サービスが完全な行を送信していないためだと思います。r.readLine() の代わりに r.read() を使用してみてください

于 2009-07-28T16:14:25.450 に答える
2

Telnet はプロトコルであり、おそらくオプション ネゴシエーションを行うことを期待しています。役に立つものを送れば、きっと役に立つものを送ってくれるでしょう。

参照: http://www.faqs.org/rfcs/rfc854.html

于 2009-07-28T16:05:15.560 に答える
0

Telnet はプロトコルとアプリケーションの両方です

アプリケーションからマシンに telnet を使用すると、アプリケーションはプロトコル情報を送信して、リモート マシンが応答できるようにします。

あなたはそれがそこにとどまると言っているので、それは機能していることを意味します.それはあなたがプロトコルに従っていないだけです.

プロトコルはここで説明されています。

https://www.rfc-editor.org/rfc/rfc854

ここでやろうとしているのは、telnet アプリケーションを作成することです。

于 2009-07-28T16:16:12.140 に答える
0

Telnet クライアントの良い例は、http://www.java2s.com/Code/Java/Network-Protocol/ExampleofuseofTelnetClient.htmにあります。

于 2009-07-28T16:22:35.920 に答える