【问题标题】:Writing a telnet client in java - how to listen for new data?用java编写一个telnet客户端——如何监听新数据?
【发布时间】:2014-10-19 15:28:18
【问题描述】:

我正在尝试用 Java 实现 Telnet 客户端,它只会从 telnet 服务器获取数据。

我已经找了好久,找到了很多东西,但不是我特别需要的东西——例如 apache commons 客户端示例,它似乎发送了很多命令,这让我很困惑诚实的。 因此,我认为编写自己的客户端使用套接字连接到服务器会更容易。

 public class TelnetClient {
    private String host;

    public TelnetClient(String host) {
        this.host = host;
    }

    public void getData(){
        Socket s = new Socket();
        PrintWriter s_out = null;
        BufferedReader s_in = null;

        try {
            s.connect(new InetSocketAddress("www.google.com" , 80));
            System.out.println("Connected");

            //writer for socket
            s_out = new PrintWriter( s.getOutputStream(), true);
            //reader for socket
            s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        }

        //Host not found
        catch (UnknownHostException e) {
            System.err.println("Don't know about host : " + host);
            System.exit(1);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Send message to server
        String message = "GET / HTTP/1.1\r\n\r\n";
        s_out.println( message );

        System.out.println("Message send");

        //Get response from server
        String response;
        try {
            while ((response = s_in.readLine()) != null) {
                System.out.println( response );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

但我目前无法在服务器上实际测试这一点,所以我只使用 google.com,但我想更改它以连续侦听服务器上的新数据行。

基本上我的问题是,我是不是走错了路——我只是使用套接字访问 telnet 服务器是不是太天真了,我是否低估了 telnet 客户端/服务器应该是什么,感谢您的帮助。

另外,如果有人有任何好的/简单的 telnet 客户端示例,那将非常有用!

【问题讨论】:

  • 请修正您的代码格式,无法阅读。
  • 我为你修好了。您应该与使用花括号的方式保持一致。而“写一行,缩进打开的大括号,缩进正文,取消缩进大括号,取消缩进下一行”看起来真的很奇怪。
  • 好的,谢谢。你对这个问题有什么意见吗?
  • 好吧,看起来它可能是半有用的,但我想做的就是打开与 telnet 服务器的连接并监听新数据,客户端需要那么复杂吗?跨度>

标签: java sockets client telnet


【解决方案1】:

我一直没有回答,因为这里发生了一些不同的事情——Google 没有在端口 80 上运行的 telnet 服务器,它是一个 Web (HTTP) 服务器。您正在使用 telnet 客户端连接到网络服务器,并尝试通过 HTTP 使用纯文本进行交谈。 HTTPtelnet 是两个不同的协议。

因此,您想要做的事情与这些 Java telnet 客户端的设计目的不匹配——即连接到远程 shell。

根据您所说的,我认为您只需发出 HTTP 请求就可以更轻松地完成它。有一个dead simple solution in this answer

import java.net.*;
import java.io.*;

public class URLConnectionReader {
    public static void main(String[] args) throws Exception {
        URL yahoo = new URL("http://www.yahoo.com/");
        URLConnection yc = yahoo.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                yc.getInputStream()));
        String inputLine;

        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }
}

套接字是复杂的东西。 Take a look at this tutorial if you want to dig deeper in to them。但它们将是一个巨大的痛苦,并且可能无法帮助您完成您需要完成的工作。

【讨论】:

  • 非常感谢您的帮助!您提供的链接也非常有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2011-03-31
  • 2016-10-03
  • 2019-05-03
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多