分享一个使用Java写的一个Telnet客户端(1)
1、先看看用到的Jar
commons-net-3.4.jar

2、启动一个Telnet服务器
这次使用Redis服务器来做这个Telnet服务器

3、先看看功能
keys *
*0
set hello "HelloTelnetClient"
+OK
get hello
$17
HelloTelnetClient

4、上代码
工具类:
package chapter5;
import org.apache.commons.net.io.Util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* This is a utility class providing a reader/writer capability required
* by the weatherTelnet, rexec, rshell, and rlogin example programs.
* The only point of the class is to hold the static method readWrite
* which spawns a reader thread and a writer thread. The reader thread
* reads from a local input source (presumably stdin) and writes the
* data to a remote output destination. The writer thread reads from
* a remote input source and writes to a local output destination.
* The threads terminate when the remote input source closes.
* *
*/
public final class IOUtil {
public static final void readWrite(final InputStream remoteInput,
final OutputStream remoteOutput,
final InputStream localInput,
final OutputStream localOutput) {
Thread reader, writer;
reader = new Thread() {
@Override
public void run() {
int ch;
try {
while (!interrupted() && (ch = localInput.read()) != -1) {
remoteOutput.write(ch);
remoteOutput.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
writer = new Thread() {
@Override
public void run() {
try {
Util.copyStream(remoteInput, localOutput);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
};
writer.setPriority(Thread.currentThread().getPriority() + 1);
writer.start();
reader.setDaemon(true);
reader.start();
try {
writer.join();
reader.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


5、主控代码:
package chapter5;
import org.apache.commons.net.telnet.TelnetClient;
import java.io.IOException;
public class TelnetDemo {
public static void main(String[] args) throws IOException {
TelnetClient telnet = new TelnetClient();
String remoteIp = "192.168.31.249";
int remotePort = 6379;
telnet.connect(remoteIp, remotePort);
IOUtil.readWrite(telnet.getInputStream(), telnet.getOutputStream(),
System.in, System.out);
telnet.disconnect();
System.exit(0);
}
}

6、要想停止正在执行的主进程呢
停止telnet服务器呢
只所以可以这样,是因为代码设计的比较合理
有时间给大家分析下这段有意思的代码
