
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类发送与接收。