/* UDP 1,将数据及源和目的封装成数据包中,不需要建立连接 2,每个数据报的大小在限制在64k 3,因为无连接,是不可靠协议的 4,不需要建立连接,速度快 TCP 1,建立连接,形成传输数据的通道 2,在连接中进行最大数据量传输 3,通过三次握手完成连接,是可靠传输协议 4,必须建立连接,效率会稍低 Socket 1,Socket 就是为了网络服务提供的一种机制 2,通信的两端都有Socket 3,网络通信其实就是Socket之间的通信 4,数据在两个Socket间通过IO传输 */
import java.net.*; import java.io.*; //发送端 class UDPSend { public static void main(String []args) throws Exception { //1,创建UDP服务 通过DatagramSocket 对象 DatagramSocket ds = new DatagramSocket(); //键盘录入 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = bufr.readLine()) != null) { if("Bye".equals(line)) break; //将字符串转变成字节流 byte [] buf = line.getBytes(); //2,确定数据 并封装成数据包 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.1"),1000); //3 通过socket 服务 将已有的数据包发送出去 通过send 方法 ds.send(dp); } //关闭资源 ds.close(); } } class UDPRecv { public static void main(String []args) throws Exception { // 1 创建UDP socket 此处设置端口号为1000 DatagramSocket ds = new DatagramSocket(1000); while(true) { //2 定义数据包 用于存储数据 byte []buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3 通过服务的receive 方法将收到的数据存入数据包中 ds.receive(dp); //4 通过数据包的方法获取其中的数据 String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); System.out.println(ip + "::"+data); } //关闭资源 ds.close(); } }