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();
}
}

当我使用另一个端口(例如 25 用于 SMTP)并且 r.readLine 的 println 工作出色时,它工作得非常好。我还可以通过命令提示符(telnet localhost 23)连接到端口 23,然后返回以下内容:-

Ubuntu 8.10 我的笔记本电脑登录:

但是当我尝试使用我的 java 类连接到端口 23 时,它只是挂在 readLine println 上。有人知道为什么吗?

4

4 回答 4

3

我猜这是因为您期待一条线路(带有 CR 或 CRLF 终止),但您的 telnet 服务没有发送完整的线路。尝试使用 r.read() 而不是 r.readLine()

于 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 回答