【发布时间】:2017-05-19 02:23:02
【问题描述】:
我正在尝试通过SwitchClient 方法Telnet 到服务器 并使用密码进行身份验证。我写了2个方法,readUntil读取和遍历直到输出结束,write写入密码。
我正在使用 Spring Tool Suite 进行开发和构建 Jar 文件。此外,我在pom.xml 中使用 UTF-8 编码。这段代码在 Windows 机器中运行良好,而在 UNIX 中失败,write 方法出现“密码超时”并打印垃圾值。
一个有趣的事实:我尝试用这个独立的类文件创建一个 jar,并在 Unix 机器中执行。令我惊讶的是,它运行良好,没有任何问题。而从 Spring Tool Suite 创建的 jar 仍然无法正常工作。请帮忙。
public SwitchClient(String server, String user, String password) {
try {
telnet.connect(server, 23);
in = telnet.getInputStream();
out = new PrintStream(telnet.getOutputStream(),false,"UTF-8");
readUntil("Enter Password: ");
write("password");
} catch (Exception e) {
e.printStackTrace();
}
}
public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1);
StringBuffer sb = new StringBuffer();
char ch = (char) in.read();
while (true) {
System.out.print(ch);
sb.append(ch);
if (ch == lastChar) {
if (sb.toString().endsWith(pattern)) {
return sb.toString();
}
}
ch = (char) in.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void write(String value) {
try {
out.println(value);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】:
-
提示:您希望我们花时间帮助您。因此,请您花 2 分钟时间正确格式化/缩进您的源代码;而不是在我们身上丢下这样的混乱。
-
关于您的实际问题:当您从 Unix 系统上的命令行打开一个 telnet 会话时 - 这有效吗?如果没有,请忘记从 Java 中执行此操作。你看,某处可能有一些防火墙阻止你访问那个远程服务器。
-
我已经减少了过度格式化,并且提示:使用
backticks格式化代码,例如方法。尊重大小写约定也有助于提高可读性。 -
对不起,我是新来这里的,因此错过了格式化。现已编辑。 @GhostCat,我可以在 unix 中手动输入密码。最重要的是,这段代码可以在我的 Windows 机器上完美运行。
-
太棒了……那是一件好事!
标签: java unix pom.xml telnet spring-tool-suite