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 @   yub4by  阅读(56)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示