我有这个小的测试套接字连接类: -
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上。有人知道为什么吗?
答案 0 :(得分:3)
我想这是因为你期望一条线路(CR或CRLF终止)但你的telnet服务不会发送完整的线路。尝试使用r.read()而不是r.readLine()
答案 1 :(得分:2)
Telnet是一种协议,可能希望您进行选项协商。一旦你发送了一些有用的东西,它可能会给你一些有用的东西。
答案 2 :(得分:0)
Telnet既是协议又是应用程序
当您将应用程序telnet到计算机时,应用程序会发送协议信息,以便远程计算机可以响应。
因为你说它留在那里,这意味着它正在工作,只是你没有遵循协议。
此处描述了协议:
http://tools.ietf.org/html/rfc854
您在这里要做的是编写一个telnet应用程序。
答案 3 :(得分:0)
可以在http://www.java2s.com/Code/Java/Network-Protocol/ExampleofuseofTelnetClient.htm
找到Telnet客户端的一个很好的例子