简单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更有意义吗?只是寻找一个好的方法。
答案 0 :(得分:1)
是的,exec听起来像是一个更好的解决方案,因为你想要控制输入和outpud数据。当你使用exec时你真的需要开球,我不明白为什么......
另外看看netcat而不是telnet - telnet有一些特殊的字符处理,如果你计划发送二进制数据,可能会给你带来麻烦。
答案 1 :(得分:0)
绝不是功能代码,但绝对比使用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();
}
}