【问题标题】:Why will socket connection to port 23 not work?为什么套接字连接到端口 23 不起作用?
【发布时间】:2010-11-14 18:30:48
【问题描述】:

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

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 上。有人知道为什么吗?

【问题讨论】:

  • 您要测试 Java 套接字吗?还是您专门使用 telnet 协议?如果你只是想测试socket代码,你可以考虑使用NetCat来监听一个连接(man nc)。
  • +1 用于 netcat - 除了调试 telnet 服务,它还允许调试 udp 连接。
  • 我正在尝试创建一个测试,它将 telnet 到服务器,导航到文件夹并运行脚本(即 telnet ip,默认端口,输入用户名,输入密码,cd 到文件夹,运行脚本), 。我对服务器的唯一访问是通过 telnet。 (我目前只是使用 localhost,因为我还没有服务器连接)

标签: java sockets port telnet


【解决方案1】:

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

【讨论】:

  • 感谢您的建议。我试过了(使用一段时间(true){ println(r.read())} 我得到了这个:- 65533 65533 24 65533 65533 32 65533 当我尝试将这些转换为字符时它只显示很少?!
  • 这里是一个开放的 telnet 服务:rainmaker.wunderground.com,端口 3000。只是提供一些天气数据... 用你的测试类试试这个,只是为了确定问题是否在测试中类或您的 Telnet 类
  • ...我自己试过了,你的代码在这个天气服务、readLine() 版本和 read() 版本上都能正常工作。所以我猜,问题出在发送方(Telnet 实现)
  • 这些字节是用于选项协商的 telnet 命令。在继续之前等待响应。
【解决方案2】:

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

见:http://www.faqs.org/rfcs/rfc854.html

【讨论】:

  • 我不需要先登录吗?当我通过 cmd 连接时,我必须输入用户名和密码?
  • 不,当然不是。服务器需要知道您了解哪些选项。
【解决方案3】:

Telnet 既是协议又是应用程序

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

既然你说它留在那里,那就意味着它正在工作,只是你没有遵守协议。

这里描述了协议:

https://www.rfc-editor.org/rfc/rfc854

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

【讨论】:

    【解决方案4】:

    可以在http://www.java2s.com/Code/Java/Network-Protocol/ExampleofuseofTelnetClient.htm 找到一个很好的 Telnet 客户端示例

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多