UDP三种通信方式

打印 上一主题 下一主题

主题 1998|帖子 1998|积分 5994

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
单播(Unicast)

单播是最常见的通信方式,数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP所在和端口号,接收方通过监听指定的端口接收数据。单播实用于一对一的通信场景。
  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. import java.net.InetAddress;
  4. public class UDPSender {
  5.     public static void main(String[] args) {
  6.         try {
  7.             DatagramSocket socket = new DatagramSocket();
  8.             String message = "Hello, World!";
  9.             byte[] buffer = message.getBytes();
  10.             InetAddress address = InetAddress.getByName("127.0.0.1");
  11.             DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 12345);
  12.             socket.send(packet);
  13.             socket.close();
  14.         } catch (Exception e) {
  15.             e.printStackTrace();
  16.         }
  17.     }
  18. }
复制代码
接收方

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. public class UDPReceiver {
  4.     public static void main(String[] args) {
  5.         try {
  6.             DatagramSocket socket = new DatagramSocket(12345);
  7.             byte[] buffer = new byte[1024];
  8.             DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
  9.             socket.receive(packet);
  10.             String receivedMessage = new String(packet.getData(), 0, packet.getLength());
  11.             System.out.println(receivedMessage);
  12.             socket.close();
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17. }
复制代码

广播(Broadcast)

广播是将数据包发送到同一网络中的所有装备。发送方将数据包发送到广播所在(如255.255.255.255),所有在同一网络中的装备都能接收到该数据包。广播实用于一对多的通信场景,但会占用大量网络带宽。
  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. import java.net.InetAddress;
  4. public class UDPSender {
  5.     public static void main(String[] args) {
  6.         try {
  7.             DatagramSocket socket = new DatagramSocket();
  8.             socket.setBroadcast(true);
  9.             String message = "Hello, Everyone!";
  10.             byte[] buffer = message.getBytes();
  11.             DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 12345);
  12.             socket.send(packet);
  13.             socket.close();
  14.         } catch (Exception e) {
  15.             e.printStackTrace();
  16.         }
  17.     }
  18. }
复制代码
接收方代码

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. public class UDPReceiver {
  4.     public static void main(String[] args) {
  5.         try {
  6.             DatagramSocket socket = new DatagramSocket(12345);
  7.             byte[] buffer = new byte[1024];
  8.             DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
  9.             socket.receive(packet);
  10.             String receivedMessage = new String(packet.getData(), 0, packet.getLength());
  11.             System.out.println(receivedMessage);
  12.             socket.close();
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17. }
复制代码

组播(Multicast)

组播是将数据包发送到一组特定的装备。发送方将数据包发送到组播所在(如224.0.0.1),只有加入该组播组的装备才能接收到数据包。组播实用于一对多的通信场景,且比广播更节省网络带宽。
  1. import java.net.DatagramPacket;
  2. import java.net.InetAddress;
  3. import java.net.MulticastSocket;
  4. public class MulticastSender {
  5.     public static void main(String[] args) {
  6.         try {
  7.             InetAddress group = InetAddress.getByName("224.0.0.1");
  8.             MulticastSocket socket = new MulticastSocket();
  9.             String message = "Hello, Group!";
  10.             DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), group, 12345);
  11.             socket.send(packet);
  12.             socket.close();
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17. }
复制代码

接收方

  1. import java.net.DatagramPacket;
  2. import java.net.InetAddress;
  3. import java.net.MulticastSocket;
  4. public class MulticastReceiver {
  5.     public static void main(String[] args) {
  6.         try {
  7.             InetAddress group = InetAddress.getByName("224.0.0.1");
  8.             MulticastSocket socket = new MulticastSocket(12345);
  9.             socket.joinGroup(group);
  10.             byte[] buffer = new byte[1024];
  11.             DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
  12.             socket.receive(packet);
  13.             String received = new String(packet.getData(), 0, packet.getLength());
  14.             System.out.println(received);
  15.             socket.leaveGroup(group);
  16.             socket.close();
  17.         } catch (Exception e) {
  18.             e.printStackTrace();
  19.         }
  20.     }
  21. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表