UDP协议与UDP通讯

1 UDP协议

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

UDP传输数据被限制在64K以内。

2 UDP通信

2.1 DatagramPacket

JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。

使用该构造方法在创建DatagramPacket对象时,不仅指定了封装数据的字节数组和数据的大小,还指定了数据包的目标IP地址(addr)和端口号(port)。该对象通常用于发送端,因为在发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样。

DatagramPacket类中的常用方法

2.2 DatagramSocket

在程序中需要实现通信只有DatagramPacket数据包也同样不行,为此JDK中提供的一个DatagramSocket类。DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包

该构造方法既可用于创建接收端的DatagramSocket对象,又可以创建发送端的DatagramSocket对象,在创建接收端的DatagramSocket对象时,必须要指定一个端口号,这样就可以监听指定的端口。

DatagramSocket类中的常用方法

2.3 UDP网络程序

要实现UDP通信需要创建一个发送端程序和一个接收端程序

UDP完成数据的发送:

复制代码
//发送端
public class UDPSend {
    public static void main(String[] args) throws IOException { //接收用户输入的数据 Scanner sc=new Scanner(System.in); String str=sc.nextLine(); //1.创建数据包对象,封装要发送的数据,接收端的ip,端口号 byte[] bytes=str.getBytes(); //创建inetAddress对象封装接收端的地址 InetAddress inet=InetAddress.getByName("192.168.1.174"); DatagramPacket dp=new DatagramPacket(bytes, bytes.length,inet,6000); //2.创建DatagramSocket对象,数据包的发送对象 DatagramSocket ds=new DatagramSocket(); //3.调用ds的send方法,发送数据包  ds.send(dp); //4.释放资源  ds.close(); } }
复制代码

UDP完成数据的接收:

复制代码
//接收端
public class UDPRecieve {
    public static void main(String[] args) throws IOException { //创建数据包传输对象DatagramSocket绑定端口号 DatagramSocket ds=new DatagramSocket(6000); //创建字节数组来接收发过来的数据 byte[] bytes=new byte[1024]; //创建数据包对象DatagramPacket DatagramPacket dp=new DatagramPacket(bytes, bytes.length); //调用数据包传输对象的receive方法来接收数据  ds.receive(dp); //拆包 //获取数据长度 int length=dp.getLength(); //获取ip地址 String ip=dp.getAddress().getHostAddress(); //获取端口号 int port=dp.getPort(); System.out.println("ip地址为:"+ip+",端口号为:"+port+",发送的内容为:"+new String(bytes,0,length)); //释放资源  ds.close(); } }
复制代码

猜你喜欢

转载自www.cnblogs.com/lxzwhite/p/10687539.html