如何使用Java测量网络的响应时间?
我们有一个客户端和一个服务器。我想测量它们之间网络的响应时间。当我向服务器发送请求时,它应该立即响应我的请求,它应该像ping请求一样,以便在服务器上没有处理时间如何使用Java测量网络的响应时间?,java,networking,response-time,Java,Networking,Response Time,我们有一个客户端和一个服务器。我想测量它们之间网络的响应时间。当我向服务器发送请求时,它应该立即响应我的请求,它应该像ping请求一样,以便在服务器上没有处理时间 如何在Java中做到这一点?我通过将带有时间戳的数据包从客户端发送到服务器,然后让服务器返回相同的时间戳来做到这一点。当服务器收到时间戳时,它可以与当前时间戳进行比较,以测量往返时间 显然有一种方法可以在Java5和更高版本中生成。如果您想测量网络速度,只需抓取System.nanoTime()前后并进行比较。请注意,如果您的程序运行
如何在Java中做到这一点?我通过将带有时间戳的数据包从客户端发送到服务器,然后让服务器返回相同的时间戳来做到这一点。当服务器收到时间戳时,它可以与当前时间戳进行比较,以测量往返时间
显然有一种方法可以在Java5和更高版本中生成。如果您想测量网络速度,只需抓取
System.nanoTime()
前后并进行比较。请注意,如果您的程序运行时没有足够的权限执行ICMP ping,那么Java将求助于对端口7使用TCP echo请求,这仍然适合您的需要。要确保服务器尽快响应,您应该
请注意,无论您如何测量连接速度,都不会有可靠的值。但是,如果对几次这样的ping进行平均,则应该有一个可接受的值。我认为需要区分服务器(机器)所用的时间和服务器端进程处理此问题所用的时间。例如,ping将简单地测量ICMP响应时间,这是一种低级网络协议返回。如果考虑TCP堆栈,然后由服务器进行后续处理,则该时间段将更大 从你的问题来看,听起来ping(ICMP)就是你想要的。在JDK 5及更高版本中,您可以执行以下操作:
String host = "192.168.0.1"
int timeOut = 5000;
boolean status = InetAddress.getByName(host).isReachable(timeOut)
您需要使用
System.nano()
或类似工具来计时。使用ping应该足够了,或者跟踪传输速率足够了。您可以使用嗅探“生产”运行服务器的响应时间。但我无权访问服务器,只能更改客户端应用程序。如果您无权访问服务器,服务器中是否有任何东西可以用来向客户端返回它可以跟踪的内容?我无法访问服务器,而且每次服务器地址都会不同。因此,我们只有可以交互和修改的客户端。我认为java只支持UDP和TCP。但在ping请求中使用ICMP,那么我们如何在java中实现它呢?谢谢你的帮助。但是我们如何使用这个方法测量响应时间,因为它只返回布尔值。kinaly帮助。在调用它之前获取纳秒数。那就叫它吧。然后得到纳秒数。从另一个减去一个,你就得到了时间段。是的,我也做了同样的,但它与ping请求不匹配。在ping请求中,我得到了5毫秒,而对于代码相同的IP地址,我得到了1024毫秒。我认为它不可靠。如果你能帮忙的话,我会很高兴的。对我的系统进行快速测试看起来不错。2个问题。1) 1000000ns=1ms,是吗?2) 由于Java在运行时的类加载和优化,您可能希望在循环中执行此“n”次,并取平均值是,1000000ns=1ms。您可以尝试另一个ip地址,而不是您的系统ip。如果您有解决方案,请让我知道。