发送端

  1. /**
  2. * 发送端
  3. */
  4. // 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定
  5. DatagramSocket socket = new DatagramSocket(6666);
  6. // 2、创建一个数据包对象封装数据(韭菜盘子)
  7. /**
  8. * @param buf the packet data.封装要发送的数据
  9. * @param length the packet data length.发送数据的大小
  10. * @param address the destination address.接受端的IP地址
  11. * @param port the destination port number.接受端的端口号
  12. */
  13. byte[] buffer = "封装要发送的数据".getBytes();
  14. InetAddress ip = InetAddress.getLocalHost();
  15. int port = 8888;
  16. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip,port);
  17. // 3、发送数据出去
  18. socket.send(packet);

接受端

  1. /**
  2. * 接受端
  3. */
  4. System.out.println("=====接受端启动=====");
  5. // 1、创建接受端对象,注册端口(人)
  6. int port = 8888;
  7. DatagramSocket socket = new DatagramSocket(port);
  8. // 2、创建一个数据包对象接收数据(韭菜盘子)
  9. byte[] buffer = new byte[1024*64];
  10. DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
  11. // 3、等待接受数据即可
  12. socket.receive(packet);
  13. // 4、取出数据即可
  14. String rs = new String(buffer);
  15. int len = packet.getLength();
  16. // 发多少,接受多少
  17. String rs = new String(buffer,0,len);
  18. System.out.println("rs = " + rs);
  19. // 5.获取发送端的IP和端口
  20. String ip = packet.getAddress().toString();
  21. int port1 = packet.getPort();
  22. System.out.println("发送端IP:"+ip);
  23. System.out.println("发送端端口:"+port1);
  24. socket.close();//关闭资源

循环接受循环发送

  1. /**
  2. * 发送端
  3. */
  4. // 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定
  5. DatagramSocket socket = new DatagramSocket(6666);
  6. // 2、创建一个数据包对象封装数据(韭菜盘子)
  7. Scanner sc = new Scanner(System.in);
  8. while (true) {
  9. System.out.println("请说:");
  10. String msg = sc.nextLine();//输入
  11. if ("exit".equals(msg)) {
  12. System.out.println("离线成功");
  13. socket.close();//释放资源
  14. break;
  15. }
  16. byte[] buffer = msg.getBytes();
  17. InetAddress ip = InetAddress.getLocalHost();
  18. int port = 8888;
  19. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
  20. // 3、发送数据出去
  21. socket.send(packet);
  22. }
  1. /**
  2. * 接受端
  3. */
  4. System.out.println("=====接受端启动,循环接受=====");
  5. // 1、创建接受端对象,注册端口(人)
  6. int port = 8888;
  7. DatagramSocket socket = new DatagramSocket(port);
  8. // 2、创建一个数据包对象接收数据(韭菜盘子)
  9. byte[] buffer = new byte[1024*64];
  10. DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
  11. while (true) {
  12. // 3、等待接受数据即可
  13. socket.receive(packet);
  14. // 4、取出数据即可
  15. byte[] data = packet.getData();
  16. int len = packet.getLength();
  17. // 发多少,接受多少
  18. String rs = new String(data,0,len);
  19. // 5.获取发送端的IP和端口
  20. String ip = packet.getAddress().toString();
  21. int port1 = packet.getPort();
  22. System.out.println("发送端IP:"+ip);
  23. System.out.println("发送端端口:"+port1);
  24. System.out.println("消息内容:"+rs);
  25. }

UDP如何实现广播

使用广播地址:255.255.255.255
具体操作:

  1. 发送端发送的数据的目的地写的是广播地址,且指定端口。(2555.255.255.255,9999)
  2. 本机所在的网段的其他主机的程序只要匹配端口成功,就可以收到消息了,(9999)
  3. 接受端要使用同一个端口号,比如9999 ```java /**
  • 发送端 */

// 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定 DatagramSocket socket = new DatagramSocket(6666);

// 2、创建一个数据包对象封装数据(韭菜盘子)

Scanner sc = new Scanner(System.in); while (true) { System.out.println(“请说:”); String msg = sc.nextLine();//输入 if (“exit”.equals(msg)) { System.out.println(“离线成功”); socket.close();//释放资源 break; } byte[] buffer = msg.getBytes(); //定义广播地址 InetAddress ip = InetAddress.getByName(“255.255.255.255”); int port = 9999; DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);

// 3、发送数据出去 socket.send(packet); }

  1. ```java
  2. /**
  3. * 接受端
  4. */
  5. System.out.println("=====接受端启动,循环接受=====");
  6. // 1、创建接受端对象,注册端口(人)
  7. int port = 9999;
  8. DatagramSocket socket = new DatagramSocket(port);
  9. // 2、创建一个数据包对象接收数据(韭菜盘子)
  10. byte[] buffer = new byte[1024*64];
  11. DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
  12. while (true) {
  13. // 3、等待接受数据即可
  14. socket.receive(packet);
  15. // 4、取出数据即可
  16. byte[] data = packet.getData();
  17. int len = packet.getLength();
  18. // 发多少,接受多少
  19. String rs = new String(data,0,len);
  20. // 5.获取发送端的IP和端口
  21. String ip = packet.getAddress().toString();
  22. int port1 = packet.getPort();
  23. System.out.println("发送端IP:"+ip);
  24. System.out.println("发送端端口:"+port1);
  25. System.out.println("消息内容:"+rs);
  26. }

UDP如何实现组播

使用组播地址:224.0.0.0~239.255.255.255
具体操作:

  1. 发送端的数据包的目的地是组播IP(例如:224.0.1.1,端口:9999)
  2. 接收端必须绑定该组播IP(224.0.1.1),端口还要对应发送端的目的端口9999,这样即可接受该组播消息。
  3. DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP

    1. /**
    2. * 发送端
    3. */
    4. // 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定
    5. DatagramSocket socket = new DatagramSocket(6666);
    6. // 2、创建一个数据包对象封装数据(韭菜盘子)
    7. Scanner sc = new Scanner(System.in);
    8. while (true) {
    9. System.out.println("请说:");
    10. String msg = sc.nextLine();//输入
    11. if ("exit".equals(msg)) {
    12. System.out.println("离线成功");
    13. socket.close();//释放资源
    14. break;
    15. }
    16. byte[] buffer = msg.getBytes();
    17. //定义组播地址
    18. InetAddress ip = InetAddress.getByName("224.0.1.1");
    19. int port = 9999;
    20. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
    21. // 3、发送数据出去
    22. socket.send(packet);
    23. }
    1. /**
    2. * 接受端
    3. */
    4. System.out.println("=====接受端启动,循环接受=====");
    5. // 1、创建接受端对象,注册端口(人)
    6. int port = 9999;
    7. MulticastSocket socket = new MulticastSocket(port);
    8. //绑定组播地址(JDK14以后就过时了)
    9. InetAddress ip1 = InetAddress.getByName("224.0.1.1");
    10. socket.joinGroup(ip1);
    11. //绑定组播地址(不过时的)
    12. // InetSocketAddress ip2 = new InetSocketAddress(InetAddress.getByName("224.0.1.1"),9999);
    13. // NetworkInterface localIP = NetworkInterface.getByInetAddress(InetAddress.getLocalHost());
    14. // socket.joinGroup(ip2,localIP);
    15. // 2、创建一个数据包对象接收数据(韭菜盘子)
    16. byte[] buffer = new byte[1024 * 64];
    17. DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
    18. while (true) {
    19. // 3、等待接受数据即可
    20. socket.receive(packet);
    21. // 4、取出数据即可
    22. byte[] data = packet.getData();
    23. int len = packet.getLength();
    24. // 发多少,接受多少
    25. String rs = new String(data, 0, len);
    26. // 5.获取发送端的IP和端口
    27. String ip = packet.getAddress().toString();
    28. int port1 = packet.getPort();
    29. System.out.println("发送端IP:" + ip);
    30. System.out.println("发送端端口:" + port1);
    31. System.out.println("消息内容:" + rs);
    32. }