1 package com.yyq; 2 3 import java.net.DatagramPacket; 4 import java.net.DatagramSocket; 5 import java.net.InetAddress; 6 import java.net.Socket; 7 import java.net.SocketException; 8 import java.nio.charset.MalformedInputException; 9 10 /* 11 * Socket(插座): 为网络服务提供的 一种机制 12 * 通信的两端都有socket 13 * 网络通信其实就在Socket间的通信 14 * 网络在两个Socket间通过IO传输 15 */ 16 /* 17 *需求:通过udp传输方式,将一段文字数据发送出去 18 * 思路:1.先建立updsocket服务(端点) 19 * 2.提供数据,并将数据封装到数据包中 20 * 3.通过socket服务的发送功能,将数据包发送出去 21 * 4.关闭资源 22 */ 23 public class UDPSend{ 24 public static void main(String[] args) throws Exception { 25 //1.创建upd服务,通过DatagramSocket对象 26 DatagramSocket ds = new DatagramSocket(8999); 27 //2.确定数据,并封装成数据包 28 /* 29 * DatagramPacket(byte[] buf, int length, InetAddress address, int port) 30 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 31 */ 32 byte[] buf = "udp wo yao xue hui".getBytes(); 33 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),4444); 34 //3.通过socket服务,将已有的数据包发送出去,通过send方法发送 35 ds.send(dp); 36 //4.关闭资源 37 System.out.println("发送成功!!"); 38 } 39 } 40 41 42 43 44 package com.yyq; 45 46 import java.net.DatagramPacket; 47 import java.net.DatagramSocket; 48 49 /* 50 * 需求:定义一个应用程序,用于接收数据并处理的 51 * 定义udp服务,通常会监听一个端口,其实就是给这个接受网络应用程序定义数字标识 52 * 方便与明确哪些应用程序过来该程序可以处理。 53 * 思路: 54 * 1.定义updsocket 服务 55 * 2.提取数据信息,在数据包中有相对应的功能解封数据包 56 * 所以要定义数据包,因为要存储接收到的字节数据,因为数据包对象中有更多 57 * 的功能可以提取字节数据中的不同数据信息 58 * 3.通过socket服务的receive方法,将受到的数据存入到已定义好的数据包中 59 * 4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上 60 * 5.关闭资源。 61 */ 62 public class UDPRece { 63 public static void main(String[] args)throws Exception { 64 65 //1.创建 upd socket,建立端点 66 DatagramSocket ds = new DatagramSocket(4444); 67 while(true){ 68 //2.定义数据包,用于存储数据 69 byte[] buf = new byte[1024]; 70 DatagramPacket dp = new DatagramPacket(buf,buf.length); 71 //3. 通过服务的receive 方法将数据存入到数据包中 72 // 阻塞式方法 ---receive 方法 73 ds.receive(dp); 74 //4.通过数据包的方法获取其中的数据 75 String ip = dp.getAddress().getHostAddress(); 76 String data = new String(dp.getData(),0,dp.getLength()); 77 int s = dp.getPort(); 78 System.out.println(ip + ":" + data+":"+s); 79 80 } 81 //ds.close(); 82 } 83 }