Telnet Java 代码在 Windows 中工作,但在 Unix 中不工作
Posted
技术标签:
【中文标题】Telnet Java 代码在 Windows 中工作,但在 Unix 中不工作【英文标题】:Telnet Java code working in Windows but not in Unix 【发布时间】: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 机器上完美运行。
太棒了……那是一件好事!
【参考方案1】:
我可以通过添加 write("\r\n"); 来解决这个问题。写入后(“密码”);
感谢大家的努力。 :-)
Please refer this URL
【讨论】:
以上是关于Telnet Java 代码在 Windows 中工作,但在 Unix 中不工作的主要内容,如果未能解决你的问题,请参考以下文章
windows server 2003中没有telnet服务怎么安装
如何在Windows系统上利用Telnet协议连接Linux服务器