// 获取端口号 packet.getPort();// 获取ip地址 packet.getAddress();
UDP实现多发多收。
发送端代码
DatagramSocket client = new DatagramSocket();// 创建数据包对象,封装数据 /** * 封装发送的数据。 * 数据的大小 * 发送端的ip地址, * 端口号 */ InetAddress service = InetAddress.getLocalHost();// 发送数据出去 Scanner sc = new Scanner(System.in); while (true){ System.out.print("请输入您要输入的内容:"); String content = sc.nextLine(); byte[] data = content.getBytes(); DatagramPacket packet = new DatagramPacket(data,data.length, service, 8888); client.send(packet); if (content.equals("exit")) { // 发送玩数据之后可以关掉管道 System.out.println("退出通道"); client.close(); break; } }
接收端数据
// 创建接收端对象 DatagramSocket socket = new DatagramSocket(8888); byte[] buffer = new byte[1024 * 64]; while (true) {// 创建数据包对象,接收数据 DatagramPacket packet = new DatagramPacket(buffer,buffer.length);// 等待接收数据 socket.receive(packet);// 获取接收到的数据的大小 int size = packet.getLength(); String str = new String(buffer, 0,size); if (str.equals("exit")) { socket.close(); System.out.println("通道关闭"); break; } System.out.println("收到数据" + str + "=====" + "端口号" + packet.getPort() + "/" + packet.getAddress()); }
UDP通信
UDP实现广播
-
使用广播地址255.255.255.255
-
发送端,发送的数据包的目的地写的是广播地址,且制定端口(255.255.255.255 9999)
-
本机所在的网段的其他主机的程序只要拼配端口 号成功接收的消息即可
// 创建数据包对象,封装数据 /** * 广播发送消息,将发送者的ip地址设置成255.255.255.255。端口号和接收者的端口号一致即可 * 封装发送的数据。 * 数据的大小 * 发送端的ip地址, * 端口号 */ InetAddress service = InetAddress.getByName("255.255.255.255");// 发送数据出去 Scanner sc = new Scanner(System.in); while (true){ System.out.print("请输入您要输入的内容:"); String content = sc.nextLine(); byte[] data = content.getBytes(); DatagramPacket packet = new DatagramPacket(data,data.length, service, 9999); client.send(packet); if (content.equals("exit")) { // 发送玩数据之后可以关掉管道 System.out.println("退出通道"); client.close(); break; } }
// 创建接收端对象 MulticastSocket socket = new MulticastSocket(9999);// 绑定对应组播地址// socket.joinGroup(InetAddress.getByName("224.0.1.1")); /** * 第一个参数,是组播的地址。有两个参数一个ip地址一个是端口 * 第二个参数是接收端主机地址所在的网段。当下使用的是当前主机默认所在的网段 */ socket.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.1.1"), 9999), NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));
// 创建数据包对象,封装数据 /** * 组播发送消息,将发送者的ip地址设置成组播范围内的任一个ip地址。端口号和接收者的端口号一致即可 * 封装发送的数据。 * 数据的大小 * 发送端的ip地址, * 端口号 */ InetAddress service = InetAddress.getByName("224.0.1.1");