Socket编程(四)
Datagram 使用UDP协议,将数据保存在数据报中,通过网络进行通信
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议, 是一种无连接,不可靠,快速的网络通信协议,通常用来传输视频等需要即时性的信息。
主要运用两个类
1.DatagramPacket 数据报类
2. DatagramSocket 进行端到端的通信类(与Socket类似) 其中的两个重要方法
① send(DatagramPacket) 发送数据报的方法
② receive (DatagramPacket) 接受数据报的放啊
3.通信原理
服务器端: 客户端:
1. 创建DatagramSocket,指定程序所使用的端口 1. 定义发送的信息 (服务器地址,端口号,发送的信息)
2. 创建DatagramPacket 2. 创建DatagramPacket,包含将要发送的信息
3. 接受客户端发送的数据信息 3. 创建DatagramSocket
4. 读取数据 4. 发送数据
5. 定义发送的信息 (服务器地址,端口号,响应的信息) 5. 创建DatagramPacket
6. 创建DatagramPacket,包含将要发送的信息 6. 接受服务器端响应的数据信息
7. 发送数据 7. 读取数据
8. 重复2,3,4,5,6,7 8. 重复2,3,4,5,6,7
8. 关闭相关资源 9. 关闭相关资源
示例代码:(也是省略了重复的步骤的)
客户端:
1 public static void main(String[] args) throws IOException { 2 /* 3 * 服务器端接受客户端的信息 4 */ 5 //1.创建DatagramSocket,指定监听端口 6 DatagramSocket socket = new DatagramSocket(999); 7 //2.创建DatagramPacket用于接受客户端发送的数据报 8 byte[] data = new byte[1024];//创建字节数组,指定接受的数据报大小 9 DatagramPacket packet = new DatagramPacket(data, data.length); 10 //3.接受客户端发送的数据信息 11 System.out.println("***服务器即将启动,等待客户端的连接***"); 12 socket.receive(packet);//此方法在接受数据报之前会进入阻塞状态 13 //4.读取数据 14 String info = new String(data, 0, packet.getLength()); 15 System.out.println("客户端发送的信息:" + "\n" + info + "\n"); 16 /* 17 * 服务器端响应客户端 18 */ 19 //1.定义发送的信息(客户端地址,端口号,数据) 20 InetAddress address = packet.getAddress(); 21 int port = packet.getPort(); 22 byte[] data2 = "欢迎你!".getBytes(); 23 //2.创建DatagramPacket,包含将要发送的信息 24 DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port); 25 //3.发送数据 26 socket.send(packet2); 27 /* 28 * 关闭相关资源 29 */ 30 socket.close(); 31 }
客户端:
1 public static void main(String[] args) throws IOException { 2 /* 3 * 客户端请求服务器端 4 */ 5 //1.定义发送的信息(服务器地址,端口号,数据) 6 InetAddress address = InetAddress.getByName("localhost"); 7 int port = 999; 8 byte[] data = "用户名:admin;密码:4399".getBytes(); 9 //2.创建DatagramPacket,包含将要发送的信息 10 DatagramPacket packet = new DatagramPacket(data, data.length, address, port); 11 //3.创建DatagramSocket 12 DatagramSocket socket = new DatagramSocket(); 13 //4.发送数据 14 socket.send(packet); 15 /* 16 * 客户端接受服务器端的响应 17 */ 18 //1.创建DatagramPacket用于接受服务器端响应的信息 19 byte[] data2 = new byte[1024];//创建字节数组,指定接受的数据报大小 20 DatagramPacket packet2 = new DatagramPacket(data2, data2.length); 21 //2.接受服务器端发送的数据信息 22 socket.receive(packet2); 23 //3.读取数据 24 String repl = new String(data2, 0, packet2.getLength()); 25 System.out.println("服务器端响应的信息:" + "\n" + repl + "\n"); 26 /* 27 * 关闭相关资源 28 */ 29 socket.close(); 30 }
输出结果:
1.开始。服务器
***服务器即将启动,等待客户端的连接***
运行到DatagramSocket的receive () 方法会使服务器程序进入阻塞状态,等待客户端的请求信息。
2.连接后。服务器 客户端:
***服务器即将启动,等待客户端的连接*** 服务器端响应的信息:
客户端发送的信息: 欢迎您!
用户名:admin;密码:4
基本原理和TCP差不多,UDP是用数据报传输,TCP是输入输出字节流进行传输。
如果有什么错误,或者我理解错误或不当的,恳请大家纠正,谢谢!嘻嘻嘻~
浙公网安备 33010602011771号