UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,是没有可靠 性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
本地同一台机器
- //接收方
- public class Recv {
- public static void main(String[] args) throws Exception {
- //打开监听端口,等待发送方的发送数据。注意这里不会建立连接
- DatagramSocket ds = new DatagramSocket(9000);
- //创建空数据报用于接收发送的数据,注意字节数组的长度不能小于需要接收的内容长度,否则会有截取部分的问题
- byte[] buffer=new byte[8192];
- DatagramPacket dp=new DatagramPacket(buffer,buffer.length);
- //阻塞当前线程等待发送的数据到达,接收后数据会填充到空数据报种
- ds.receive(dp);
- System.out.println(dp.getAddress()); //发送方的IP地址
- System.out.println(dp.getPort()); //发送方的端口号
- byte[] data=dp.getData(); //接收到的数据
- System.out.println(new String(data));
- ds.close();
- }
- }
- public class Sender {
- public static void main(String[] args) throws Exception {
- // 随意打开一个空闲端口,用于发送数据报
- DatagramSocket ds = new DatagramSocket();
- // 需要发送的具体数据
- String str = "你好!";
- byte[] arr = str.getBytes();
- // 构建对应的数据报
- // 参数1是发送的具体数据,参数2是具体数据的长度,参数3是接收方的IP地址,参数4是接收方的端口号
- DatagramPacket dp = new DatagramPacket(arr, arr.length, InetAddress.getByName("localhost"), 9000);
- ds.send(dp); //将数据报发送到网络上,由各个数据报自行寻址到目标地
- ds.close();
- }
- }