-1

次のコードを実行すると (注: 使用されている実際の IP アドレスではありません)

Socket s = new Socket("120.200.100.111", 80);
s.setSoTimeout(10 * 1000);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in.readLine();

10 秒後、「SocketTimeoutException: Read timed out」が表示されます

しかし、telnet を実行すると、次のようになります。

telnet> open 120.200.100.111 80
Trying 120.200.100.111...
Connected to foo.bar.org.
Escape character is '^]'.

完全なアプリケーションでは、ソケット通信に何らかの既存の API を使用する必要があることは承知していますが、上記のテストでは、サーバーから何らかのタイムリーな応答を取得するべきではありませんか?

4

1 に答える 1

2

上記のテストは、サーバーから何らかのタイムリーな応答を得るべきではありませんか?

いいえ。Telnet 交換は、サーバーが何かを送信することから始まるわけではありません。何かを送信する必要があります。サーバーがあなたを待っています。あなたはそれを待っています。あなたは読み取りタイムアウトを持っているので、読み取りタイムアウトが発生します。

Telnet クライアントは、既定では読み取りタイムアウトを使用しません。

于 2013-04-15T06:34:49.710 に答える