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协议发送和接收数据的图解:
时间: 2024-10-27 13:39:39