当前位置: 首页> 文旅> 美景 > 【Android通信】UDP的单播和组播模式

【Android通信】UDP的单播和组播模式

时间:2025/7/11 18:53:15来源:https://blog.csdn.net/qq_17470165/article/details/140924239 浏览次数:0次

前言

UDP(用户数据报协议)是一种无连接协议,用于在网络上发送和接收数据报。UDP通信的特点是简单、速度快、开销低,但不保证数据包的顺序和可靠性。UDP常用于实时应用,如视频流、在线游戏和DNS查询等。


说明

UDP(用户数据报协议)通信中,可以使用单播和组播两种模式

  • 【单播模式】
    1、单播是点对点的通信方式,数据报从一个单一的源地址发送到一个单一的目标地址。

  • 【组播模式】
    1、组播地址:这是一个特殊的IP地址范围,用于组播通信。组播地址的范围是 (224.0.0.0 - 239.255.255.255)。
    2、加入组播组:客户端和服务端必须使用相同的组播地址加入组播组。这意味着它们都会监听同一个组播地址上的数据包。
    3、发送数据:发送方将数据包发送到组播地址,所有加入该组播组的接收方都可以接收到这个数据包。。


UDP通信的基本步骤:

1、发送方(Sender):

  • 创建一个UDP套接字
  • 构造要发送的数据包(DatagramPacket
  • 通过套接字发送数据包

2、接收方(Receiver):

  • 创建一个UDP套接字并绑定到一个特定端口
  • 准备一个缓冲区来接收数据包
  • 通过套接字接收数据包

简单实现


1、单播模式发送端


class UnicastSender {private var socket: DatagramSocket? = nullfun sendData() {try {socket = DatagramSocket()val message = "I'm UniCast"val buffer = message.toByteArray()val receiverAddress = InetAddress.getByName("192.168.3.181")val packet = DatagramPacket(buffer, buffer.size, receiverAddress, 4445)socket?.send(packet)} catch (e: Exception) {e.printStackTrace()}finally {socket?.close()}}
}

2、单播模式接收端

class UnicastReceiver {private lateinit var socket: DatagramSocketfun receiverData() {try {socket = DatagramSocket(4445)val buffers = ByteArray(1024)val packet = DatagramPacket(buffers, buffers.size)socket.receive(packet)val receiver = String(packet.data, 0, packet.length)println("Received message: $receiver")} catch (e: Exception) {e.printStackTrace()}finally {socket.close()}}
}

3、组播模式发送端


class MulticastSender {private lateinit var socket: DatagramSocketfun sendData() {try {socket = DatagramSocket()val message = "I'm Multicast"val buffers = message.toByteArray()val group = InetAddress.getByName("230,0,0,0")val packet = DatagramPacket(buffers, buffers.size, group, 4446)socket.send(packet)println("Message sent to the multicast group.")} catch (e: Exception) {e.printStackTrace()}finally {socket.close()}}
}

4、组播模式接收端


class MulticastReceiver {private lateinit var socket: MulticastSocketfun receiverData() {try {socket = MulticastSocket(4446)val group = InetAddress.getByName("230.0.0.0")socket.joinGroup(group)val buffers = ByteArray(1024)val packet = DatagramPacket(buffers, buffers.size)socket.receive(packet)val data = String(packet.data, 0, packet.length)println("Received message: $data")} catch (e: Exception) {e.printStackTrace()} finally {try {val group = InetAddress.getByName("230.0.0.0")socket.leaveGroup(group)socket.close()} catch (e: Exception) {e.printStackTrace()}}}
}

总结

单播:用于点对点通信,数据报从一个源发送到一个目标。
组播:用于点对多点通信,数据报从一个源发送到一个组,这个组包含多个接收者。

关键字:【Android通信】UDP的单播和组播模式

版权声明:

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

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

责任编辑: