欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > UDP三种通信方式

UDP三种通信方式

2025/5/21 16:32:41 来源:https://blog.csdn.net/2303_76627649/article/details/148025434  浏览:    关键词:UDP三种通信方式

单播(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();}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词