Java编程实现基于 UDP 实现完整的 PING 功能

时间: 2024-04-30 10:21:06 浏览: 11
以下是使用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对象。 请注意,以上代码仅是示例代码,实际应用中需要更加完善和健壮。

相关推荐

最新推荐

recommend-type

Linux网络编程之基于UDP实现可靠的文件传输示例

主要介绍了Linux网络编程之基于UDP实现可靠的文件传输示例,是很实用的技巧,需要的朋友可以参考下
recommend-type

python基于socket实现的UDP及TCP通讯功能示例

主要介绍了python基于socket实现的UDP及TCP通讯功能,结合实例形式分析了基于Python socket模块的UDP及TCP通信相关客户端、服务器端实现技巧,需要的朋友可以参考下
recommend-type

java实现的基于UDP的聊天系统课程报告

java实现的基于UDP的聊天系统课程报告 java实现的基于UDP的聊天系统课程报告
recommend-type

python实现udp传输图片功能

主要为大家详细介绍了python实现udp传输图片功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言编写基于TCP和UDP协议的Socket通信程序示例

主要介绍了C语言编写基于TCP和UDP协议的Socket通信程序示例,其中TCP的客户端与服务器端采用多线程实现,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。