一、UDP通信原理
UDP协议是一种不可靠的网络协议,它在通信的两头各建立一个Socket对象,但这两个Socket对象只是发送,接收数据的对象。
因此,对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
二、UDP发送数据
发送数据的步骤:
1.创建发送端的Socket对象(DatagramSocket)
2.创建数据,并打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)构造用于发送长度的分组的数据报包length`指定主机上到指定的端口号
3.调用DatagramSocket对象的方法发送数据
send(DatagramPacket p) 从此套接字发送数据报包。
4.关闭发送端
UdpSendDemo:
/*实现简单的UDP发送数据
1.创建发送端的Socket对象(DatagramSocket)
2.创建数据,并打包
DatagramPacket(byte[] buf,  int length, InetAddress address, int port)
构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
3.调用DatagramSocket对象的方法发送数据
send(DatagramPacket p)  从此套接字发送数据报包。
4.关闭发送端
* */
public class UdpSendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象(DatagramSocket)
        DatagramSocket ds = null;
        try {
            ds=new DatagramSocket();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        //创建数据,并打包
        //DatagramPacket(byte[] buf,  int length, InetAddress address, int port)
        //构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
        byte[] bytes ="再美不过姑娘你".getBytes();//数据数组
//        int length=bytes.length;//数据长度
//        InetAddress address=InetAddress.getByName("cy");//指定的主机IP
//        int port=10086;//指定的端口号
        //调用DatagramSocket对象的方法发送数据
        //send(DatagramPacket p)  从此套接字发送数据报包。
//        DatagramPacket dp=new DatagramPacket(bytes,length,address,port);
        //写法二
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length,InetAddress.getByName("cy"),10086);
        ds.send(dp);
        //关闭发送端
        ds.close();
    }
}
三、UDP接收通信
步骤:
1.创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
2.创建一个数据包,用于接收数据要注意数据包的长度
3.调用DatagramSocket对象的方法接收数据
4.解析数据包,并把数据在控制台显示
5.关闭接收端
UdpSendDemo
package Demo0420;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/*实现Udp简单的接收数据
1.创建接收端的Socket对象(DatagramSocket)
2.创建一个数据包,用于接收数据
3.调用DatagramSocket对象的方法接收数据
4.解析数据包,并把数据在控制台显示
5.关闭接收端
* */
public class UdpReciveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端的Socket对象(DatagramSocket)
        DatagramSocket ds=new DatagramSocket(10086);//绑定指定的端口号
        //创建一个数据包,用于接收数据
        byte[] bytes=new byte[1024];
        //调用DatagramSocket对象的方法接收数据
        //创建接收端的DatagramPacket对象
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
        ds.receive(dp);
        //解析数据包,并把数据在控制台显示
        //byte[] getData() 返回数据缓冲区
        byte[] datas = dp.getData();
        //int getlength()返回要发送的数据的长度或接收的数据的长度
        int len=dp.getLength();
        String s = new String(datas, 0, len);
        System.out.println("数据时:"+s);
        //关闭接收端
        ds.close();
    }
}
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号