• 周五. 4月 26th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

java 25

admin

11月 28, 2021

UDP传输

两个类:DatagramSocket与DatagramPacket(具体看API)

  A:建立发送端,接收端。

  B:建立数据包。

  C:调用Socket的发送接收方法。

  D:关闭Socket。

  E:发送端与接收端是两个独立的运行程序。

UDP传输-发送端思路

  UDP发送数据:
    A:创建Socket发送端对象
    B:创建数据报包(把数据打包)
    C:调用Socket对象发送数据报包
    D:释放资源(底层是IO流)

UDP传输-发送端代码

 1 public static void main(String[] args) throws IOException {
 2         // A:创建发送端Socket对象
 3         // DatagramSocket():此类表示用来发送和接收数据报包的套接字。
 4         DatagramSocket ds = new DatagramSocket();
 5         
 6         // B:创建数据,并把数据打包
 7         // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 8         // 创建数据
 9         byte[] bys = "UDP发送端".getBytes();
10         // 数据长度
11         int length = bys.length;
12         
13         // 创建IP地址对象
14         InetAddress address = InetAddress.getByName("172.19.xx.xx");
15         
16         // 创建端口
17         int port = 10010;
18         
19         //把数据进行打包
20         DatagramPacket dp = new DatagramPacket(bys,length,address,port);
21         
22         // C:调用Socket对象的发送方法发送数据包
23         // public void send(DatagramPacket p) 数据报包用来实现无连接包投递服务
24         ds.send(dp);
25         
26         //D:释放资源
27         ds.close();
28     }
29 
30 }

UDP传输-接收端思路

  UDP接收数据:
    A:创建Socket接收端对象
    B:创建一个数据报包来接收数据(创建容器)
    C:调用Socket对象的方法来接收数据报包
    D:解析数据包(byte转换成String),并打印在控制台
    E:释放资源

UDP传输-接收端代码

 1 public class ReceiveDemo {
 2     public static void main(String[] args) throws IOException {
 3         // 创建接收端Socket对象
 4         // DatagramSocket(int port)
 5         DatagramSocket ds = new DatagramSocket(10010);
 6 
 7         // 创建一个数据包(接收容器)
 8         // DatagramPacket(byte[] buf, int length)
 9         byte[] bys = new byte[1000];
10         int length = bys.length;
11         DatagramPacket dp = new DatagramPacket(bys, length);
12 
13         // 调用Socket对象的接收方法接收数据
14         // public void receive(DatagramPacket p)
15         ds.receive(dp); // 阻塞式
16 
17         // 解析数据包,并显示在控制台
18         // 获取对方的ip
19         // public InetAddress getAddress()
20         InetAddress address = dp.getAddress();
21         String ip = address.getHostAddress();
22         // public byte[] getData():获取数据缓冲区
23         // public int getLength():获取数据的实际长度
24         byte[] bys2 = dp.getData();
25         int len = dp.getLength();
26         String s = new String(bys2, 0, len);
27         System.out.println(ip + "传递的数据是:" + s);
28 
29         // 释放资源
30         ds.close();
31     }
32 }

注意:因为UDP接收端是阻塞式接收,所以先启动接收端,再启动发送端。

UDP协议发送和接收数据的图解:

《java 25》有一个想法
  1. Wow, awesome blog format! How lengthy have you ever been blogging for?
    you make blogging look easy. The overall glance of your website is
    great, let alone the content! You can see similar here sklep

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注