UDP
传输层协议, UDP 可能丢包, 不安全
这个传输一次最多是 60 K 的数据.
发送端
package com.leon.Network; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class MyUdpSend { public static void main(String[] args) throws Exception { System.out.println("开始发送数据......"); //1. 使用 datagramSocket 指定端口, 创建发送端 DatagramSocket client = new DatagramSocket(8888); //2. 准备数据, 一定要转成字节数组 String data = "asdfasdf"; byte[] datas = data.getBytes(); //3. 封装 DatagramPacket 包裹,需要指定目的地 DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost",9999)); //4. 发送包裹send(DatagramPacket p) client.send(packet); //5. 释放资源 client.close(); System.out.println("结束发送数据......"); } }
接收端
package com.leon.Network; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class MyUdpReceive { public static void main(String[] args) throws Exception { System.out.println("开始接收数据......"); //1. 使用 datagramSocket 指定端口, 创建接收端 byte[] container = new byte[1024*60]; DatagramSocket server = new DatagramSocket(9999); //2. 准备容器, 封装 DatagramPaket包裹 DatagramPacket packet = new DatagramPacket(container, 0, container.length); //3. 阻塞式收包裹 server.receive(packet); // 阻塞拿数据 //4. 分析数据 byte[] getData(), getLength() byte[] datas = packet.getData(); int len = packet.getLength(); System.out.println(new String(datas, 0, len)); //5. 释放资源 server.close(); System.out.println("结束接收数据......"); } }
所以, 如果是上传文件, 利用 UDP 也是没有问题的,基本步骤不变, 只是需要把文件转换成字节数组存储并转发.
TCP
传输层协议: 面向连接, 安全可靠.
245