为什么到端口23的套接字连接不起作用?

时间:2009-07-28 16:03:09

标签: java sockets port telnet

我有这个小的测试套接字连接类: -

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 个答案:

答案 0 :(得分:3)

我想这是因为你期望一条线路(CR或CRLF终止)但你的telnet服务不会发送完整的线路。尝试使用r.read()而不是r.readLine()

答案 1 :(得分:2)

Telnet是一种协议,可能希望您进行选项协商。一旦你发送了一些有用的东西,它可能会给你一些有用的东西。

请参阅:http://www.faqs.org/rfcs/rfc854.html

答案 2 :(得分:0)

Telnet既是协议又是应用程序

当您将应用程序telnet到计算机时,应用程序会发送协议信息,以便远程计算机可以响应。

因为你说它留在那里,这意味着它正在工作,只是你没有遵循协议。

此处描述了协议:

http://tools.ietf.org/html/rfc854

您在这里要做的是编写一个telnet应用程序。

答案 3 :(得分:0)

可以在http://www.java2s.com/Code/Java/Network-Protocol/ExampleofuseofTelnetClient.htm

找到Telnet客户端的一个很好的例子