我需要对一些IP/计算机执行ping操作。 代码可能在任何平台上执行(Windows,Linux,Mac),我需要获取有关丢失和往返时间的信息。
因此,Java的ping exec不够好,因为我需要将ping响应解析为字符串,这在不同的平台和操作系统语言中是不同的。
那么我需要做什么? 我知道有类似JNI的东西,但我是Java新手,所以需要一点帮助。
这仍然意味着我需要针对每个平台进行本地实现吗?
有示例或建议吗?
由于Java不是平台无关的,您可以使用System.getProperty("os.name")
来查询您所在的操作系统并解析响应或根据其定义命令。
另外,您可以使用InetAddress
中的isReachable(int timeout)
,它似乎是最接近ICMP ECHO REQUEST的实现,但它将不会提供有关丢失和往返时间的信息。
另一个想法是使用tracert/tracepath而不是ping来获取往返时间?查看此线程以获取更多信息。
我想解析仍然是您最简单的选择。如果您只需要这个正则表达式,那么我会感到惊讶:
time[<=]([0-9.]+)[ ]?ms
括号中的数字表示时间,例如1
、14
或1.239
,可以作为参数传递给Float.parseFloat()
方法。
我使用JNI获取ping命令。 我使用本地(C)实现了ping,然后用JNI进行了封装。 缺点是需要针对每个平台编译C dll。