在过去几周我尝试创建连接诊断工具时做了大量的研究,我不想只是检查连接是否可用但是要诊断是否存在抖动,数据包丢失等等。
到目前为止,似乎Java不支持真正的ICMP请求,并且有一些解决方法,但没有一个可以达到我想要做的。
有谁知道是否可以构建这种工具,还是应该开始研究其他选项?
答案 0 :(得分:0)
您可以使用' Exec'在命令行运行ping(假设您的操作系统支持此操作),或JNI连接到本机应用程序以执行ping操作。
创建自己的ICMP协议实现并非易事。
如果您确实使用Exec,请注意它在初始测试中并不总是很明显的限制:
答案 1 :(得分:0)
我相信ICMP4J正是您所需要的:Internet Control Message Protocol for Java
答案 2 :(得分:0)
似乎InetAdress在可能的情况下正在使用ICMP:
https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html
看看公共布尔isReachable(int超时)
测试该地址是否可访问。尽力而为 实现以尝试到达主机,但防火墙和服务器 配置可能会阻止请求,从而导致无法访问状态 而某些特定端口可能是可访问的。典型的实现 如果可以获得特权,将使用ICMP ECHO REQUESTs, 否则它将尝试在端口7(Echo)上建立TCP连接 目标主机。
您可以在此处找到一个简单的使用示例: How to test if a remote system is reachable 或这里How to ping an IP address