java ping 功能_Java实现ping功能

本文探讨了Java中实现ping功能的不同方法,包括InetAddress的isReachable()方法在Windows和Linux上的不同行为。在Windows上,该方法通过连接端口7进行,而在Linux上,普通用户和root用户的实现方式有所不同。同时提到了Java官方NIO包中的ping示例,该示例实际上连接的是daytime端口13。总结指出,对于Java 5及以上版本,InetAddress.isReachable()是跨平台的最佳选择。
摘要由CSDN通过智能技术生成

之前的文章中,我推荐使用InetAddress类中的isReachable()方法来实现ping的功能。不久后,就有网上的朋友对我

的观点做出了指点。其指出的是isReachable方法在Windows系统平台上的实现(native

c)并没有使用ICMP,而是全完使用连接echo端口7 的方法。

在OpenJDK 6 Windows平台上Native c的实现中有几段注释:

C代码  a4c26d1e5885305701be709a3d33442f.png

him.sin_port = htons(7);

connect_rv = connect(fd, (structsockaddr *)&him, len);

可以看到,在windows下isReachable方法的确是只使用了连接端口7的方法。这一点在API文档上并没有指出

。所以我对其理解存在偏差也就在此(没有去看具体的实现代码,也感谢指出我问题的朋友)。

网上还有另一种方法是使用官方关于NIO包的例子中的ping方法:

源代码URL:http://java.sun.com/j2se/1.5.0/docs/guide/nio/example/Ping.java

我看了一下这个官方的NIO

ping的例子,并对其进行了调试和数据捕获。实际,这个官方的例子使用的方法并不是通过ICMP实现的,而是通过连接daytime端口13

Java代码  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值