第十七节:第三部分:网络通信:UDP通信,一发一收,多发多收
UDP通信介绍
DatagramSocket类提供的方法
使用UDP通信实现:发送消息、接收消息
客户端可以反复发送数据步骤
UDP总结
代码:
代码一:完成UDP通信快速入门:实现1发1收
Server类
package com.itheima.day2_udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;/*
* 目标:完成UDP通信快速入门-服务端开发
* */
public class Server {public static void main(String[] args) throws Exception {System.out.println("----服务端启动----");// 1、创建一个服务端对象(创建一个接韭菜的人) 注册端口DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象,用于接收数据的(创建一个韭菜盘子)byte[] buffer = new byte[1024*64];// 64KB.DatagramPacket packet = new DatagramPacket(buffer, buffer.length);// 3、开始正式使用数据包来接收客户端发来的数据socket.receive(packet);// 4、从字节数组中,把接收到的数据直接打印出来// 接收多少就倒出多少//获取本次数据包接收了多少数据。int len = packet.getLength();String rs = new String(buffer, 0, len);System.out.println(rs);System.out.println(packet.getAddress().getHostAddress());System.out.println(packet.getPort());socket.close();// 释放资源!}
}
Client类
package com.itheima.day2_udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*
* 目标:完成UDP通信快速入门:实现1发1收
* */
public class Client {public static void main(String[] args) throws Exception {// 1、创建客户端对象(发韭菜出去的人)DatagramSocket socket = new DatagramSocket(7777);//2、创建数据包对象封装要发出去的数据(创建一个韭菜盘子)//参数一:封装要发出去的数据。//参数二:发送出去的数据大小(字节个数)//参数三:服务端的IP地址(找到服务端主机)//参数四:服务端程序的端口byte[] bytes = "我爱你飞鸟马时abc".getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),6666);// 3、开始正式发送这个数据包的数据出去了socket.send(packet);System.out.println("客户端数据发送完毕~~~");socket.close();// 释放资源!}
}
代码二:完成UDP通信快速入门:实现多发多收
Server类
package com.itheima.day3_udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*
* 目标:完成UDP通信快速入门-服务端开发
* */
public class Server {public static void main(String[] args) throws Exception {System.out.println("----服务端启动----");// 1、创建一个服务端对象(创建一个接韭菜的人) 注册端口DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象,用于接收数据的(创建一个韭菜盘子)byte[] buffer = new byte[1024*64];// 64KB.DatagramPacket packet = new DatagramPacket(buffer, buffer.length);while (true) {// 3、开始正式使用数据包来接收客户端发来的数据socket.receive(packet);// 4、从字节数组中,把接收到的数据直接打印出来// 接收多少就倒出多少//获取本次数据包接收了多少数据。int len = packet.getLength();String rs = new String(buffer, 0, len);System.out.println(rs);System.out.println(packet.getAddress().getHostAddress());System.out.println(packet.getPort());System.out.println("---------------------------------");}}
}
Client类
package com.itheima.day3_udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;/*
* 目标:完成UDP通信快速入门:实现多发多收
* */
public class Client {public static void main(String[] args) throws Exception {// 1、创建客户端对象(发韭菜出去的人)DatagramSocket socket = new DatagramSocket();//2、创建数据包对象封装要发出去的数据(创建一个韭菜盘子)//参数一:封装要发出去的数据。//参数二:发送出去的数据大小(字节个数)//参数三:服务端的IP地址(找到服务端主机)//参数四:服务端程序的端口Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg = sc.nextLine();byte[] bytes = msg.getBytes();// 一旦发现用户输入的exit命令,就退出客户端if ("exit".equals(msg)) {socket.close();//释放资源break;// 跳出死循环}DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),6666);// 3、开始正式发送这个数据包的数据出去了socket.send(packet);}}
}