UDP(用户数据报协议)是一个简单的面向数据报的传输层协议,它不提供任何形式的数据到达确认、排序或者产生重复数据的去除等服务。而Java为我们提供了对UDP的支持,让我们可以通过Java进行UDP编程。
一、Java UDP编程简介
在Java中,DatagramSocket类和DatagramPacket类为我们提供了UDP协议的实现。DatagramSocket是数据报通信的一端,而DatagramPacket则是用于接收或发送的数据报包。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//发送端
public class UDPSender {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();
String str = "Hello, World!";
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("127.0.0.1"), 9999);
ds.send(dp);
ds.close();
}
}
二、Java UDP发送和接收数据
在Java的UDP编程中,发送和接收数据使用的方法都是相对直接的。以发送数据为例,我们首先获取一个DatagramSocket实例,然后创建我们的消息数据,并将其包装到DatagramPacket对象中,然后调用数据报套接字的send方法将其发送出去。
//接收端
public class UDPReceiver {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String str = new String(dp.getData(), 0, dp.getLength());
System.out.println(str);
ds.close();
}
}
三、Java UDP超时设置和异常处理
在网络编程中,超时设置和异常处理是不可或缺的一部分。我们可以通过设置数据报套接字的setSoTimeout方法来设置超时时间,单位是毫秒,如果超过这个时间接收方法还没有接收到任何数据,那么将抛出SocketTimeoutException异常。
public class UDPReceiverWithTimeout {
public static void main(String[] args) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
try {
DatagramSocket ds = new DatagramSocket(9999);
ds.setSoTimeout(5000); //设置超时为5秒
ds.receive(dp);
String str = new String(dp.getData(), 0, dp.getLength());
System.out.println(str);
ds.close();
} catch (SocketTimeoutException e) {
System.out.println("接收超时,数据接收失败");
} catch (Exception e) {
e.printStackTrace();
}
}
}
沃梦达教程
本文标题为:Java UDP编程用法介绍
猜你喜欢
- 深入了解Spring的事务传播机制 2023-06-02
- JSP页面间传值问题实例简析 2023-08-03
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- JSP 制作验证码的实例详解 2023-07-30
- Java中的日期时间处理及格式化处理 2023-04-18
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- Spring Security权限想要细化到按钮实现示例 2023-03-07
- Java实现顺序表的操作详解 2023-05-19
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01