【问题标题】:pipe telnet output to logfile with tee command using Java process exec使用 Java 进程 exec 使用 tee 命令将 telnet 输出通过管道传输到日志文件
【发布时间】:2013-09-08 20:35:42
【问题描述】:

project 中的并发和流读取对于简单的MUD client 来说有点令人头疼,所以我正在尝试寻找替代方案。 tee 命令看起来符合在文件和终端之间同时拆分输出的要求。然后如何通过 telnet 会话发送消息?

在控制台和文件之间分割远程输出:

thufir@dur:~/NetBeansProjects/TelnetConsole$ 
thufir@dur:~/NetBeansProjects/TelnetConsole$ telnet rainmaker.wunderground.com 3000 | tee out.txt
Trying 38.102.137.140...
Connected to rainmaker.wunderground.com.
Escape character is '^]'.
------------------------------------------------------------------------------
*               Welcome to THE WEATHER UNDERGROUND telnet service!            *

然后我如何通过管道或以某种方式将 Java 消息发送到系统 telnet 客户端?或者,也许,使用exec 并从 Java 中启动 telnet 会话和 tee 会更有意义吗?只是在寻找一个好的方法。

【问题讨论】:

    标签: java linux unix pipe telnet


    【解决方案1】:

    是的,exec 听起来是一个更好的解决方案,因为您想同时控制输入和输出数据。当你使用 exec 时你真的需要 tee in,我不明白为什么......

    还可以看看 netcat 而不是 telnet - telnet 有一些特殊的字符处理,如果您打算发送二进制数据,可能会给您带来麻烦。

    【讨论】:

    • 这是泥巴,所以首选telnet。只是研究如何从 exec 写入 telnet 会话。我可以解析 tee 生成的日志文件。没有线程,我想。
    【解决方案2】:

    绝不是功能代码,但绝对比使用 Apache TelnetClient 更简单。但是,无法将管道命令(?)与 java exec 一起使用:

    package exec;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    
    class Ideone {
    
        public static void main(String[] args) throws IOException {
            new Ideone().start();
        }
    
        public void start() throws IOException {
            String[] s = new String[6];
            s[0] = "telnet";
            s[1] = "rainmaker.wunderground.com";
            s[2] = "3000";
            s[3] = "|";
            s[4] = "tee";
            s[5] = "out.log";
            for (int i=0;i<s.length;i++ ) {
                System.out.println(s[i]);
            }
            Process process = Runtime.getRuntime().exec(s);
            OutputStream stdin = process.getOutputStream();
            InputStream stderr = process.getErrorStream();
            InputStream stdout = process.getInputStream();
            read();
            write(stdout);
        }
    
        private void parseLog() {
            //read the log file, automate responses
        }
    
        private void write(InputStream stdin) throws UnsupportedEncodingException, IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(stdin, "UTF-8"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
    
        }
    
        private void read() {
    
            Thread read = new Thread() {
    
                String command = null;
    
                @Override
                public void run() {
                    BufferedReader bufferedInput = new BufferedReader(new InputStreamReader(System.in));
                    do {
                        try {
                            command = bufferedInput.readLine();
                        } catch (IOException ex) {
                            System.out.println(ex);
                        } finally {
                        }
                    } while (true);
                }
            };
            read.start();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2019-10-26
      • 2018-08-18
      • 2018-07-19
      • 1970-01-01
      • 2016-04-18
      • 2012-11-30
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多