Java网络编程之UDP网络通信详解
1.UDP网络通信编程原理
1.1 UDP网络通信编程介绍
类 DatagramSocket 何 DatagramPacket(数据包/数据报) 实现了基于 UDP协议网络程序;
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达;
DatagramPacket 对象封装了 UDP数据报,在数据报中包含了发送端IP地址和端口号,以及接收端的IP地址和端口号;
UDP协议中每个数据报都给出了完整的地址信息,因此无法建立发送方与接收方的连接。
没有明确的服务端和客户端,演变成数据的发送端和接收端;
接收数据和发送数据都是通过 DatagramSocket 对象完成。
1.2 UDP网络通信编程的基本流程
核心的两个类/对象,DatagramSocket与DatagramPacket;
建立发送端和接收端;
建立数据包;
调用DatagramSocket的发送和接收方法;
关闭DatagramSocket。
2.UDP网络通信编程案例
1.编写一个接收端A,一个发送端B;
2.接收端在 9999端口等待接收数据(receive);
3.发送端向接收端发送数据:“你好!接收端”;
4.接收端接收到发送端的数据后,回复:“你好!发送端”,再退出;
5.发送端接收回复的数据,退出。
UDPReceiverA
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * @author 兴趣使然黄小黄 * @version 1.0 * 接收端A */ public class UDPReceiverA { public static void main(String[] args) throws IOException { //1.创建一个DatagramSocket对象,准备在9999接收数据 DatagramSocket socket = new DatagramSocket(9999); //2.构建一个DatagramPacket对象,准备接收数据 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); //3.调用接收方法,将通过网络传输的 DatagramPacket对象 填充到 packet对象 System.out.println("接收端A 等待接收数据..."); socket.receive(packet); //4.把packet进行拆包,取出数据 int length = packet.getLength();//实际数据字节长度 byte[] data = packet.getData();//实际接收的数据 String s = new String(data, 0, length); System.out.println(s); //回复信息给B端 data = "你好!发送端".getBytes(); packet = new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), 9998); socket.send(packet); //5.关闭资源 socket.close(); } }
UDPSenderB
import java.io.IOException; import java.net.*; /** * @author 兴趣使然黄小黄 * @version 1.0 * 发送端B */ public class UDPSenderB { public static void main(String[] args) throws IOException { //1.创建 DatagramSocket 对象,准备在9998发送和接收数据 DatagramSocket socket = new DatagramSocket(9998); //2.将需要发送的数据,封装到 DatagramPacket 中 byte[] data = "你好!接收端".getBytes(); DatagramPacket datagramPacket = new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), 9999); socket.send(datagramPacket); //接收A消息 socket.receive(datagramPacket); int length = datagramPacket.getLength();//实际数据字节长度 data = datagramPacket.getData();//实际接收的数据 String s = new String(data, 0, length); System.out.println(s); //关闭资源 socket.close(); } }
到此这篇关于Java网络编程之UDP网络通信详解的文章就介绍到这了,更多相关Java UDP网络通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot中@EnableAsync和@Async注解的使用小结
在SpringBoot中,可以通过@EnableAsync注解来启动异步方法调用的支持,通过@Async注解来标识异步方法,让方法能够在异步线程中执行,本文就来介绍一下,感兴趣的可以了解一下2023-11-11springboot tomcat的maxHttpFormPostSize参数示例解析
这篇文章主要介绍了springboot tomcat的maxHttpFormPostSize参数示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08
最新评论