[英]Why will socket connection to port 23 not work?
我有这个小的测试套接字连接类:
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我的笔记本电脑登录:
但是,当我尝试使用Java类连接到端口23时,它只是挂在readLine println上。 有人知道为什么是这样吗?
我猜这是因为您期望有一条线路(带有CR或CRLF终端),但是您的telnet服务没有发送完整的线路。 尝试使用r.read()而不是r.readLine()
Telnet是一种协议,可能希望您进行选项协商。 一旦您发送了有用的东西,它可能会给您发送一些有用的东西。
Telnet既是协议又是应用程序
当您使用telnet应用程序到计算机时,应用程序将发送协议信息,以便远程计算机可以响应。
既然您说它留在那儿,那意味着它正在工作,只是您没有遵循协议。
协议在这里描述:
http://tools.ietf.org/html/rfc854
您在这里尝试做的是编写一个telnet应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.