数据报模型

 1 import java.io.IOException;
 2 import java.net.DatagramPacket;
 3 import java.net.DatagramSocket;
 4 import java.net.SocketAddress;
 5 import java.net.SocketException;
 6 
 7 /**
 8  * 服务器 
 9  */
10 public class Server {
11 
12     public static void main(String[] args) {
13         DatagramSocket ds = null; // 发送 和接收
14         DatagramPacket dp = null; // 打包 和拆包
15         // 回复的新包裹
16         DatagramPacket dpTo = null; // 打包 和拆包
17         try {
18             // 实例化服务器
19             ds = new DatagramSocket(8800);
20             // 创建一个byte类型的数组 ==》快递的内容
21             byte[] buf = new byte[1024];
22             dp = new DatagramPacket(buf, buf.length);
23             // 接收B用户给我们的快递
24             ds.receive(dp);
25             /**
26              * 拆包操作
27              * dp.getData():包裹实际内容
28              * 0 :从什么位置开始获取信息
29              * dp.getLength():包裹所有内容
30              */
31             String msg = new String(dp.getData(), 0, dp.getLength());
32             System.out.println("用户B的地址==》" + dp.getAddress().getHostName());
33             System.out.println("用户B包裹的内容==》" + msg);
34             // 用户A想给用户B回信 获取B用户的地址
35             SocketAddress address = dp.getSocketAddress();
36             // 用户A开始打包
37             byte[] reply = "您好! 我是用户A已经收到了您的包裹!".getBytes();
38             dpTo = new DatagramPacket(reply, reply.length, address);
39             // 发送
40             ds.send(dpTo);
41         } catch (SocketException e) {
42             e.printStackTrace();
43         } catch (IOException e) {
44             e.printStackTrace();
45         } finally { // 释放资源
46             ds.close();
47         }
48 
49     }
50 }
服务器端
 1 /**
 2  * 客户端   
 3  */
 4 public class Client {
 5     public static void main(String[] args) {
 6         DatagramSocket ds = null; // 发送 和接收
 7         DatagramPacket dp = null; // 打包 和拆包
 8 
 9         // 回复的新包裹
10         DatagramPacket dpTo = null; // 打包 和拆包
11 
12         try {
13             byte[] say = "我是B用户,给您买了一张春节回家的火车票".getBytes();
14             InetAddress address = InetAddress.getByName("localhost");
15             // 打包
16             dp = new DatagramPacket(say, say.length, address, 8800);
17             // 发送
18             ds = new DatagramSocket();
19             ds.send(dp);
20             // 用户B 开始接收 A用户的数据
21             byte[] buf = new byte[1024];
22             dpTo = new DatagramPacket(buf, buf.length);
23             // 接收
24             ds.receive(dpTo);
25             // 拆包
26             String reply = new String(dpTo.getData(), 0, dpTo.getLength());
27             System.out.println("我是用户B得到了A的回信地址====》"
28                     + dpTo.getAddress().getHostAddress());
29             System.out.println("我是用户B得到了A的回信内容====》" + reply);
30         } catch (SocketException e) {
31             e.printStackTrace();
32         } catch (IOException e) {
33             e.printStackTrace();
34         } finally { // 释放资源
35             ds.close();
36         }
37     }
38 }
客户端

数据通过DatagramPacket类打包,通过DatagramSocket类发送与接收。

原文地址:https://www.cnblogs.com/ak666/p/8204766.html