马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
单播(Unicast)
单播是最常见的通信方式,数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP所在和端口号,接收方通过监听指定的端口接收数据。单播实用于一对一的通信场景。
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- public class UDPSender {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket();
- String message = "Hello, World!";
- byte[] buffer = message.getBytes();
- InetAddress address = InetAddress.getByName("127.0.0.1");
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 12345);
- socket.send(packet);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码 接收方
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- public class UDPReceiver {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket(12345);
- byte[] buffer = new byte[1024];
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
- socket.receive(packet);
- String receivedMessage = new String(packet.getData(), 0, packet.getLength());
- System.out.println(receivedMessage);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码
广播(Broadcast)
广播是将数据包发送到同一网络中的所有装备。发送方将数据包发送到广播所在(如255.255.255.255),所有在同一网络中的装备都能接收到该数据包。广播实用于一对多的通信场景,但会占用大量网络带宽。
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- public class UDPSender {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket();
- socket.setBroadcast(true);
- String message = "Hello, Everyone!";
- byte[] buffer = message.getBytes();
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 12345);
- socket.send(packet);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码 接收方代码
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- public class UDPReceiver {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket(12345);
- byte[] buffer = new byte[1024];
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
- socket.receive(packet);
- String receivedMessage = new String(packet.getData(), 0, packet.getLength());
- System.out.println(receivedMessage);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码
组播(Multicast)
组播是将数据包发送到一组特定的装备。发送方将数据包发送到组播所在(如224.0.0.1),只有加入该组播组的装备才能接收到数据包。组播实用于一对多的通信场景,且比广播更节省网络带宽。
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- public class MulticastSender {
- public static void main(String[] args) {
- try {
- InetAddress group = InetAddress.getByName("224.0.0.1");
- MulticastSocket socket = new MulticastSocket();
- String message = "Hello, Group!";
- DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), group, 12345);
- socket.send(packet);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码
接收方
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- public class MulticastReceiver {
- public static void main(String[] args) {
- try {
- InetAddress group = InetAddress.getByName("224.0.0.1");
- MulticastSocket socket = new MulticastSocket(12345);
- socket.joinGroup(group);
- byte[] buffer = new byte[1024];
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
- socket.receive(packet);
- String received = new String(packet.getData(), 0, packet.getLength());
- System.out.println(received);
- socket.leaveGroup(group);
- socket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |