package net.jweb.common.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Map; public class UsingProcessBuilder { public static String getNodeStatuss() { System.out.println("UsingProcessBuilder.getNodeStatuss()");
String command = " telnet 192.168.4.200 3306 ";
command = "cmd /d dir";// ok
command = "cmd";// ok
command = "calc";// ok
command = "telnet";// 不行
Process process;
StringBuffer sb = new StringBuffer();
try { // Process proc=Runtime.getRuntime().exec("notepad"); process = Runtime.getRuntime().exec(command);
// InputStream inputStream = process.getInputStream();
//
// int read;
// byte[] b = new byte[1024*1024];
// while ((read=inputStream.read(b))!=-1) {
// String str = new String(b);
// sb.append(str);
// }
// inputStream.close(); final InputStream is1 = process.getInputStream();
new Thread() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is1));
try {
String lineB = null;
while ((lineB = br.readLine()) != null)
{
if (lineB != null)
System.out.println(lineB);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
} /**
* 获取Windows系统下的网卡的MAC地址
*
* @return
*/
public static String getPhysicalAddress() {
Process p = null;
try {
// 执行ipconfig /all命令
// "cmd ", " 192.168.4.200", " 3306"
// "ipconfig", "/all"
// p = new ProcessBuilder("ipconfig", "/all").start();
// p = new ProcessBuilder("telnet", "host 192.168.4.200").start();
p = Runtime.getRuntime().exec(" telnet 192.168.4.200 3306" );
// p = new ProcessBuilder("cmd", " dir").start();
} catch (IOException e) {
e.printStackTrace();
return "eeeeeeeee";
}
byte[] b = new byte[];
int readbytes = -;
StringBuffer sb = new StringBuffer();
// 读取进程输出值
InputStream in = p.getInputStream();
try {
while ((readbytes = in.read(b)) != -) {
sb.append(new String(b, , readbytes));
} } catch (IOException e1) {
} finally {
try {
in.close();
} catch (IOException e2) {
}
} return sb.toString();
} public static void executeMyCommand2() {
ProcessBuilder pb = null;
String sysatt = null;
try {
// 创建一个进程示例
pb = new ProcessBuilder("cmd.exe");
// 获取系统参数并打印显示
Map<String, String> env = pb.environment();
// Iterator it = env.keySet().iterator();
// while (it.hasNext()) {
// sysatt = (String) it.next();
// System.out.println("System Attribute:" + sysatt + "="
// + env.get(sysatt));
// }
// 设置工作目录
pb.directory(new File("C:\\Windows\\winsxs\\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_f387767e655cd5ab"));
Process p = pb.start();
// 将要执行的Windows命令写入
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
p.getOutputStream()));
// '/r/n'是必须写入的
// bw.write("test.bat /r/n");
bw.write("ping -t www.baidu.com /r/n");
// flush()方法是必须调用的
bw.flush();
// 将执行结果打印显示
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 执行自定义的一个命令,该命令放在C:/temp下,并且需要2个环境变量的支持。
*/
public static boolean executeMyCommand() {
// 创建系统进程创建器
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
// 获得进程的环境
Map<String, String> env = pb.environment();
// 设置和去除环境变量
env.put("VAR1", "myValue");
env.remove("VAR0");
env.put("VAR2", env.get("VAR1") + ";");
// 切换工作目录
pb.directory(new File("C:/temp"));
try {
// 得到进程实例
Process p = pb.start();
// 等待该进程执行完毕
if (p.waitFor() != ) {
// 如果进程运行结果不为0,表示进程是错误退出的
// 获得进程实例的错误输出
InputStream error = p.getErrorStream();
// do something
}
// 获得进程实例的标准输出
InputStream sdin = p.getInputStream(); } catch (IOException e) {
} catch (InterruptedException e) {
}
return true;
} public static void main(String[] args) {
String address = UsingProcessBuilder.getNodeStatuss(); // executeMyCommand2(); System.out.println(address); }
}

如上的代码, 我想判断服务器远程端口是否开启, 却一直没有得到正确的结果。我使用的是telnet , 其他的好像也不行。

执行 telnet 的时候, waitFor()的返回值始终是-1, 读取p.getInputStream 始终没有输出。 Runtime/ ProcessBuilder 其实都是一样的。

后面突然领悟到, telnet其实是打开了子进程进行通话, 其本身没有任何内容输出,直接返回了-1。而java的Process  好像没有办法获取其是否成功生成了子进程, 以及子进程的内容。

读了 http://blog.csdn.net/Code_cj/article/details/6411682 后明白了。 要实现这样的功能恐怕只有借助第三方的工具:commons-net ----  Jsch

java中 用telnet 判断服务器远程端口是否开启的更多相关文章

  1. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  2. Java中的空值判断

    Java中的空值判断 /** * 答案选项: * A YouHaidong * B 空 * C 编译错误 * D 以上都不对 */ package com.you.model; /** * @auth ...

  3. tips:Java中while的判断条件

    tips:Java中while的判断条件! 在c++中,有时候会遇到这种情况: while(x = y){ dosomething; } 如果x与y相等,这个时候如果循环体中没有跳出的点,那么会无限循 ...

  4. 161101、在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  5. 在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  6. 如何在Web服务器80端口上开启SSH服务

    本文所讨论的网络端口复用并非指网络编程中采用SO_REUSEADDR选项的 Socket Bind 复用.它更像是一个带特定路由功能的端口转发工具,在应用层实现. 背景 笔者所处网络中防火墙只开放了一 ...

  7. java中Integer,String判断相等与integer的比较大小

    package sfk.bbs.test.springjsbctempletTest; import static org.junit.Assert.*; import org.junit.Test; ...

  8. windows----------如何修改windows服务器远程端口

    远程连接并登录到 Windows 实例. 选择开始 > 运行,输入 regedit 打开注册表编辑器. 查找 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...

  9. java中如何高效判断数组中是否包含某个特定的值

    四种不同方式检查数组是否包含某个值 使用List: public static boolean useList(String[] arr, String targetValue) { return A ...

随机推荐

  1. Matlab中一些函数的区别

    1.fix, floor,ceil,round   都是对x取整,但取整方向不同.   fix(x):向0取整(也可以理解为向中间取整)   floor(x):向左取整(从名字看,地板,表示下面) c ...

  2. java-并发-线程对象

    浏览以下内容前,请点击并阅读 声明 每个线程都和类Thread的实例相关,有两种基本的使用Thread对象来创建并发应用的方法: 直接控制线程的创建和管理,每次需要开始一个异步任务使简单地实例化Thr ...

  3. Mac无法写入移动硬盘

    1.使用mac 磁盘工具,格式化移动硬盘 频繁穿插于mac于pc之间者,大批量拷贝大型文件者,请用exfat 首先,排除Fat32,虽然这是兼容性最好的文件格式,但一个不支持4g以上文件的格式(现在随 ...

  4. Visual Studio 2015 Update 2正式版下载地址

     转载自:王彬的博客 地址:http://blog.sina.com.cn/s/blog_55f899fb0102wcwg.html Visual Studio Professional 2015(带 ...

  5. 弱省互测#1 t3

    题意 给出一棵n个点的树,求包含1号点的第k小的连通块权值和.(\(n<=10^5\)) 分析 k小一般考虑堆... 题解 堆中关键字为\(s(x)+min(a)\),其中\(s(x)\)表示\ ...

  6. 【Linux】crontab 定时任务

    7月份,公司海外运营国发生数据库联接未释放,造成连接池连接不足的情况, 当时查询并没有及时解决问题, 为了避免现场同事多次人工重启系统的,因此写了个shell脚本,通过crontab 实现系统重启,但 ...

  7. dd——留言板再加验证码功能

    1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表  这个不要碰, ...

  8. 让/etc/profile文件修改后立即生效

    方法1: 让/etc/profile文件修改后立即生效 ,可以使用如下命令: # .  /etc/profile 注意: . 和 /etc/profile 有空格 方法2: 让/etc/profile ...

  9. OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置

    摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...

  10. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...