JavaSE-21.2.1【UDP发送数据、接收数据】

 1 package day12.lesson2;
 2 
 3 import java.io.IOException;
 4 import java.net.*;
 5 
 6 /*
 7 2 UDP通信程序
 8 
 9 2.1 UDP发送数据
10 
11     Java中的UDP通信
12         UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,
13         因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
14         Java提供了DatagramSocket类作为基于UDP协议的Socket
15 
16     构造方法
17         DatagramSocket()创建数据报套接字并将其绑定到本机地址上的任何可用端口
18         DatagramPacket(byte[] buf,int len,InetAddress add,int port)创建数据包,发送长度为len的数据包到指定主机的指定端口
19 
20     相关方法
21         void send(DatagramPacket p) 发送数据报包
22         void close() 关闭数据报套接字
23         void receive(DatagramPacket p) 从此套接字接受数据报包
24 
25     发送数据的步骤
26         创建发送端的Socket对象(DatagramSocket)
27         创建数据,并把数据打包
28         调用DatagramSocket对象的方法发送数据
29         关闭发送端
30  */
31 public class SendDemo {
32     public static void main(String[] args) throws IOException {
33         DatagramSocket ds = new DatagramSocket();
34 
35 //        byte[] bys = "hello udp".getBytes();
36 //        int length = bys.length;
37 //        InetAddress address = InetAddress.getByName("192.168.1.66");
38 //        int port = 10086;
39 //        DatagramPacket dp = new DatagramPacket(bys, length, address, port);
40         //优化写法
41         DatagramPacket dp = new DatagramPacket(
42                 "hello udp".getBytes(),
43                 "hello udp".getBytes().length,
44                 InetAddress.getByName("MSI-YUBABY"),
45                 10086
46         );
47 
48         ds.send(dp);
49 
50         ds.close();
51     }
52 }
 1 package day12.lesson2;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.SocketException;
 7 
 8 /*
 9 2.2 UDP接收数据
10 
11     接收数据的步骤
12         创建接收端的Socket对象(DatagramSocket)
13         创建一个数据包,用于接收数据
14         调用DatagramSocket对象的方法接收数据
15         解析数据包,并把数据在控制台显示
16         关闭接收端
17 
18     构造方法
19         DatagramPacket(byte[] buf, int len) 创建一个DatagramPacket用于接收长度为len的数据包
20 
21     相关方法
22         byte[] getData() 返回数据缓冲区
23         int getLength() 返回要发送的数据的长度或接收的数据的长度
24  */
25 public class ReceiveDemo {
26     public static void main(String[] args) throws IOException {
27         DatagramSocket ds = new DatagramSocket(10086);
28 
29         byte[] bytes = new byte[1024];
30         DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
31 
32         ds.receive(dp);
33 
34 //        byte[] data = dp.getData();
35 //        int length = dp.getLength();
36 //        String dataStr = new String(data, 0, length);
37 //        System.out.println("接收到的数据:" + dataStr);
38         //优化写法
39         System.out.println("接收到的数据:" + new String(
40                 dp.getData(),
41                 0,
42                 dp.getLength()
43         ));
44 
45         ds.close();
46         //先执行ReceiveDemo-main,再执行SendDemo-main
47     }
48 }

 

posted @ 2021-06-10 19:42  yub4by  阅读(56)  评论(0编辑  收藏  举报