注意要点:参考官方的demo,而不要采用大多数网上的demo,访问交换机会在登录那块堵塞.所以要实现Runnable,如果要显示反馈的话实现TelnetNotificationHandler 接口.
package com.sobey.telnet.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import org.apache.commons.net.telnet.EchoOptionHandler;
import org.apache.commons.net.telnet.SuppressGAOptionHandler;
import org.apache.commons.net.telnet.TelnetClient;
import org.apache.commons.net.telnet.TelnetNotificationHandler;
import org.apache.commons.net.telnet.TerminalTypeOptionHandler;
import org.springframework.stereotype.Service;
@Service
public class TelnetService implements Runnable, TelnetNotificationHandler {
public TelnetService() {
super();
}
private static TelnetClient tc = null;
private InputStream in;
private PrintStream out;
@Override
public void receivedNegotiation(int negotiation_code, int option_code) {
String command = null;
if (negotiation_code == TelnetNotificationHandler.RECEIVED_DO) {
command = "DO";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) {
command = "DONT";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) {
command = "WILL";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) {
command = "WONT";
}
System.out.println("Received " + command + " for option code " + option_code);
}
public void execCommand(String ip, String username, String password, String command) {
Thread t = new Thread(new TelnetService(ip, 23, username, password, command));
t.start();
}
@Override
public void run() {
InputStream instr = tc.getInputStream();
try {
byte[] buff = new byte[1024];
int ret_read = 0;
do {
ret_read = instr.read(buff);
if (ret_read > 0) {
System.out.print(new String(buff, 0, ret_read));
}
} while (ret_read >= 0);
} catch (Exception e) {
System.err.println("Exception while reading socket:" + e.getMessage());
}
try {
tc.disconnect();
} catch (Exception e) {
System.err.println("Exception while closing telnet:" + e.getMessage());
}
}
public TelnetService(String ip, int port, String username, String password, String command) {
if (intconnect(ip, port)) {
write(username);
write(password);
write(command);
}
}
private void write(String command) {
try {
out.println(command);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
private boolean intconnect(String ip, int port) {
try {
tc = new TelnetClient();
TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false);
EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, false);
SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true);
tc.addOptionHandler(ttopt);
tc.addOptionHandler(echoopt);
tc.addOptionHandler(gaopt);
tc.connect(ip, port);
in = tc.getInputStream();
out = new PrintStream(tc.getOutputStream());
return true;
} catch (Exception e) {
e.printStackTrace();
try {
tc.disconnect();
} catch (IOException e1) {
e1.printStackTrace();
}
return false;
}
}
}
分享到:
相关推荐
在Java开发中,数据库连接管理是一项关键任务,而Apache Commons DBCP(Database Connection Pool)是广泛使用的数据库连接池实现之一。本主题将详细解析标题和描述中提及的三个核心库:`commons-dbcp-1.2.1.jar`、`...
赠送jar包:spring-data-commons-2.3.9.RELEASE....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:spring-data-commons-2.0.6.RELEASE....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:commons-net-3.1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
例如,`commons-beanutils.jar`可以帮助开发者方便地处理对象属性,`commons-collections-3.1.jar`提供了丰富的集合操作,而`commons-pool-1.2.jar`则有助于优化对象的创建和使用,减少系统资源的消耗。在实际项目中...
赠送jar包:commons-net-3.3.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
4. **使用 Commons IO**:在保存文件时,`Commons IO`库提供了方便的方法,如`Files.copy()`,可以用来将上传的文件流安全地写入目标文件。 5. **异常处理**:在处理过程中,要捕获并适当地处理可能出现的异常,如...
使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...
赠送jar包:spring-data-commons-2.0.9....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对
这意味着,当开发或运行与XenServer相关的应用程序时,你需要这个特定的ws-commons-util库,它可能包含了处理特定任务或提供特定功能的类和方法。 【标签】"ws-comm-util.jar" 是对压缩包内主要组件的简写,这可能...
Apache Commons DBCP(Database Connection Pool)和Apache Commons Pool是两个在Java开发中广泛使用的开源库,主要用于数据库连接管理和对象池服务。这两个JAR文件,`commons-dbcp-1.4.jar` 和 `commons-pool-1.5.6...
通过使用Commons Logging,开发者可以轻松地在运行时切换日志实现,或者在不支持特定日志系统的环境中选择合适的替代方案。这对于大型项目和跨团队协作尤其有用,因为它提供了日志实现的灵活性和一致性。 3. **...
赠送jar包:commons-net-3.8.0.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
在Java Web开发中,文件上传是一项常见的功能,用于允许用户上传图片、文档等文件到服务器。Apache Commons FileUpload和Commons IO...通过理解这两个库的工作原理和使用方法,可以提高开发效率并提升应用程序的质量。
3. **编码数据**:使用Commons Codec库对请求体中的敏感信息进行编码,如将手机号码进行URL编码。 4. **发送请求**:通过HttpClient的execute方法发送请求,并获取响应。 5. **处理响应**:解析HTTP响应,检查状态码...
在处理文件上传和下载的过程中,IO库提供了许多实用工具类和方法,如文件的创建、删除、复制、重命名,以及读写文件内容等。在与FileUpload库配合使用时,IO库可以方便地进行文件的读写和临时存储,确保文件上传过程...
例如,当使用BeanUtils进行属性赋值时,如果出现异常(如找不到对应的setter方法),可以通过commons-logging记录这些错误信息,便于调试和问题排查。 `commons-beanutils-1.9.1.jar`与`commons-logging-1.1.3.jar`...
赠送jar包:commons-fileupload-1.4.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:commons-collections-3.2.2.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。