UDP

UDP
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据报的大小在限制在64k内。
因无连接,是不可靠协议。
不需要建立连接,速度快。
应用案例:QQ、FeiQ聊天、在线视频用的都是UDP传输协议。

UDP传输
DatagramSocket(用来发送和接收数据报包的套接字)与DatagramPacket(数据报包)。
建立发送端,接收端。
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
发送端与接收端是两个独立的运行程序

发送端

package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSendDemo {

    
    public static void main(String[] args) throws IOException {
        
        System.out.println("发送端启动");
        
        // udpsocket服务。使用DatagramSocket对象
        DatagramSocket ds= new DatagramSocket(10086);
        
        byte[] buf ="我爱学java".getBytes();
        
        // 将要发送的数据封装到数据包中,指定发送ip和端口
        DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),9000);
        
        // 通过udp的socket服务将数据包发送出去,使用send方法。
        ds.send(dp);
        //关闭资源
        ds.close();
        

    }

}

接受端

package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiveDemo {

    
    public static void main(String[] args) throws IOException {
        
        System.out.println("服务端启动");
        // 创建数据包
        DatagramSocket ds =new DatagramSocket(9000);
        byte[] buf =new byte[1024];
        DatagramPacket dp= new DatagramPacket(buf, buf.length);
        
        //将接收到数据放到数据包中
        ds.receive(dp);
        
        //获取数据
        String ip =dp.getAddress().getHostName();
        int port =dp.getPort();
        String text=new String(dp.getData(),0,dp.getLength());
        System.out.println(ip+"-"+port+"+"+text);
        
        //关闭资源
        ds.close();

    }

}

由于UDP协议传输数据,只管发送数据,而不管接收端是否能够接收到数据。因此,应该首先启动接
收端程序,再启动发送端程序

最后服务端output:

服务端启动
127.0.0.1-10086+我爱学java

原文地址:https://www.cnblogs.com/xurui1995/p/5299096.html