已关闭 。这个问题需要更加集中。它当前不接受答案。
想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。
2年前关闭。
改善这个问题
我在一个支持全国性网络上许多不同站点的大型组织中工作。我们的供应商为我们在每个站点使用的硬件提供诊断工具。诊断和报告可通过Telnet访问。
问题是我们想同时监视 所有 站点,当前我们只能一次(通过telnet)一次检查它们。
我已经构建了一些东西,Runtime.exec(String)用来将ping命令发送到每个IP地址。但是现在,我希望能够使用供应商的诊断和报告工具自动发送特定命令。关于最佳方法的任何想法吗?注意我们有一个混合系统- 有些站点位于防火墙后面,有些则不在。完整的解决方案将是理想的选择,但我也会选择部分解决方案。
Runtime.exec(String)
是否可以简单地获取由返回的Process对象的输入和输出流,Runtime.exec(String)并将我的命令发送到输入并读取输出的响应?还是我应该连接到端口23(通常的telnet端口),然后像其他任何客户端- 服务器系统一样运行。还是其他完全不同的东西?
我正在继续尝试,现在就在头脑风暴。
CODE :(已删除敏感信息)
void exec(String ip) { Socket sock = null; BufferedReader br = null; PrintWriter pw = null; try { sock = new Socket(ip, 23); br = new BufferedReader(new InputStreamReader(sock.getInputStream())); pw = new PrintWriter(sock.getOutputStream()); this.read(br); System.out.println("Sending username"); pw.println("username"); this.read(br); // Always blocks here System.out.println("Sending password"); pw.println("password"); this.read(br); pw.close(); br.close(); sock.close(); } catch(IOException e) { e.printStackTrace(); } } void read(BufferedReader br) throws IOException { char[] ca = new char[1024]; int rc = br.read(ca); String s = new String(ca).trim(); Arrays.fill(ca, (char)0); System.out.println("RC=" + rc + ":" + s); //String s = br.readLine(); // //while(s != null) //{ // if(s.equalsIgnoreCase("username:")) // break; // // s = br.readLine(); // // System.out.println(s); //}
您为什么不简单地使用Socket系统?
在端口23上打开所选服务器的套接字,然后从此处发送您自己的命令。
这是一个简单的例子:
public class EchoClient { public static void main(String[] args) throws IOException { Socket pingSocket = null; PrintWriter out = null; BufferedReader in = null; try { pingSocket = new Socket("servername", 23); out = new PrintWriter(pingSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream())); } catch (IOException e) { return; } out.println("ping"); System.out.println(in.readLine()); out.close(); in.close(); pingSocket.close(); } }
资源: