Java编程实现基于 UDP 实现完整的 PING 功能
时间: 2024-04-30 12:21:06 浏览: 148
编程实现基于UDP的PING (Java)
5星 · 资源好评率100%
以下是使用Java实现UDP Ping的示例代码:
```java
import java.net.*;
public class UDPPingClient {
private static final int TIMEOUT = 1000; // 设置超时时间为1秒
private static final int MAX_TRIES = 5; // 设置最大尝试次数为5次
public static void main(String[] args) {
if (args.length != 2) { // 确保有两个参数(主机名和端口号)
System.out.println("Usage: java UDPPingClient <hostname> <port>");
return;
}
String hostname = args[0];
int port = Integer.parseInt(args[1]);
try {
InetAddress serverAddr = InetAddress.getByName(hostname);
DatagramSocket socket = new DatagramSocket(); // 创建Socket对象
socket.setSoTimeout(TIMEOUT); // 设置超时时间
// 循环发送Ping消息
for (int i = 1; i <= MAX_TRIES; i++) {
String message = "Ping " + i + " " + new java.util.Date();
byte[] data = message.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, serverAddr, port);
long startTime = System.currentTimeMillis(); // 记录发送Ping消息的时间
socket.send(packet);
try {
packet.setData(new byte[1024]); // 清空数据缓存区
socket.receive(packet); // 接收服务器的回复
long endTime = System.currentTimeMillis(); // 记录接收服务器回复的时间
double rtt = (endTime - startTime) / 1000.0; // 计算往返时间
System.out.printf("Received response from %s:%d in %.3f seconds%n",
packet.getAddress().getHostAddress(), packet.getPort(), rtt);
} catch (SocketTimeoutException e) {
System.out.printf("Request timed out for %d times%n", i);
}
}
socket.close(); // 关闭Socket对象
} catch (Exception e) {
System.err.println(e);
}
}
}
```
上述代码中,我们使用了DatagramSocket类来创建一个UDP Socket对象。我们设置了超时时间为1秒,并且最大尝试次数为5次。在循环中,我们发送Ping消息,并等待服务器的回复。如果在超时时间内没有收到服务器的回复,我们就认为这次尝试超时了。如果接收到服务器的回复,我们就计算往返时间,并输出接收到服务器的回复的IP地址、端口号和往返时间。最后,我们关闭Socket对象。
请注意,以上代码仅是示例代码,实际应用中需要更加完善和健壮。
阅读全文