1. 数据来自于键盘录入
键盘录入数据要自己控制录入结束。
2. 代码实现:
(1)发送端:
1 package com.himi.updDemo1; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.util.Scanner; 8 9 /** 10 * 11 * UDP协议发送数据: 12 * 1. 创建发送端的Socket对象 13 * 2. 创建数据,并把数据打包 14 * 3. 调用Socket对象的发送方法,发送数据包 15 * 4. 释放资源 16 * 17 */ 18 public class UdpSendDemo { 19 public static void main(String[] args) throws IOException { 20 //创建发送端的Socket对象,这里使用的UDP使用的客户端的Socket对象类是DatagramSocket. 21 //DatagramSocket:DatagramSocket() 22 DatagramSocket ds = new DatagramSocket(); 23 24 //创建数据,并把数据打包 25 //DatagramPacket:此类表示数据报包 26 /**DatagramPacket(byte[] buf, int length, InetAddress address, int port) 27 ** 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 28 */ 29 30 while(true) { 31 Scanner sc = new Scanner(System.in); 32 String data = sc.nextLine(); 33 if(data.equals("886")){ 34 break; 35 } 36 37 byte[] bytes = data.getBytes(); 38 //IP地址对象 39 InetAddress address = InetAddress.getByName("49.123.72.145"); 40 //端口号 41 int port = 10086; 42 //数据打包 43 DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port); 44 45 46 //调用Socket对象的发送方法,发送数据包 47 //public void send(DatagramPacket p) 48 ds.send(dp); 49 50 } 51 //释放资源 52 ds.close(); 53 54 } 55 56 }
(2)接收端:
1 package com.himi.updDemo1; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 8 /** 9 * 10 * UDP协议接收数据: 11 * 1. 创建接收端的Socket对象 12 * 2. 创建数据包,接收数据(接收容器) 13 * 3. 调用Socket对象的接收方法,接收数据包 14 * 4. 解析数据包,并显示在控制台 15 * 5. 释放资源 16 * 17 */ 18 19 public class UdpReceiveDemo { 20 21 public static void main(String[] args) throws IOException { 22 // 创建接收端的Socket对象 23 //DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口 24 DatagramSocket ds = new DatagramSocket(10086); 25 26 27 while (true) { 28 // 创建数据包,接收数据(接收容器) 29 // DatagramPacket(byte[] buf, int length) 30 byte[] bytes = new byte[1024]; 31 int length = bytes.length; 32 33 DatagramPacket dp = new DatagramPacket(bytes, length); 34 35 // 调用Socket对象的接收方法,接收数据包 36 // public void receive(DatagramPacket p) 37 ds.receive(dp);// 阻塞式方法 38 39 // 解析数据包,并显示在控制台 40 // 获取对方的IP 41 // public InetAddress getAddress() 42 InetAddress address = dp.getAddress(); 43 String IP = address.getHostAddress(); 44 45 // public byte[] getData():获取数据的缓冲区 46 // public int getLength():获取数据的实际长度 47 byte[] bys = dp.getData(); 48 int len = dp.getLength(); 49 String s = new String(bys, 0, len); 50 51 System.out.println("发送端" + IP + "的数据:" + s); 52 } 53 54 //释放资源 55 //ds.close(); 56 57 58 59 } 60 61 }
运行效果如下:
时间: 2024-10-03 12:49:45