一、UDP 基础知识
UDP 是User Datagram Protocol 的简称, 翻译为用户数据报协议。
UDP 是一种无连接的传输协议,应用程序无需创建连接就可以发送数据报。
UDP 有三种通讯方式:单播、组播、广播。
1. 通讯方式
- 单播 通过指定通讯主机 IP 和端口, 可以实现将消息发送到指定主机。
- 组播 数据收发仅在指定分组中进行,其他未加入分组的主机不能收发对应的数据。
- 广播 将消息发送到同一广播网络中每个主机。
2. UDP 地址
UDP 采用的也是类似于 IP 一样的地址,无需在操作系统中设置。只需要在应用程序中使用,且与 网卡 IP 地址不冲突。
广播地址
UDP 使用的广播地址为:255.255.255.255, 注意:本地广播信息不会被路由器转发。
组播地址
D 类地址用于组播,D 类地址范围为 224.0.0.0 ~ 239.255.255.255,这些地址又划分为以下 4 类:
| 地址 | 说明 |
|---|---|
| 224.0.0.0~224.0.0.255 | 为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用 |
| 224.0.1.0~224.0.1.255 | 是公用组播地址,可以用于 Internet;欲使用需申请 |
| 224.0.2.0~238.255.255.255 | 为用户可用的组播地址(临时组地址),全网范围内有效 |
| 239.0.0.0~239.255.255.255 | 为本地管理组播地址,仅在特定的本地范围内有效 |
3. UDP 数据报
数据报长度
包含报头在内的数据报的最大长度为 64 K, 一些实际应用往往会限制数据报的大小,有时会降低到 8192 字节。UDP 信息包的标题很短,只有 8 个字节,相对于 TCP 的 20 个字节信息包而言,UDP 的额外开销很小。
数据报特征
UDP 报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。
二、程序实现
服务端
import io.netty.bootstrap.Bootstrap
import io.netty.channel.ChannelFactory
import io.netty.channel.ChannelInitializer
import io.netty.channel.EventLoopGroup
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.InternetProtocolFamily
import io.netty.channel.socket.nio.NioDatagramChannel
import io.netty.util.NetUtil
import udp.UdpChannelInboundHandler
public class Server {
static void main(String[] args) {
Server server = new Server()
InetSocketAddress address = new InetSocketAddress("239.8.8.1", 51888)
server.run(address)
}
void run(InetSocketAddress groupAddress) {
EventLoopGroup group = new NioEventLoopGroup()
try {
Bootstrap b = new Bootstrap()
b.group(group)
.channelFactory(new ChannelFactory<NioDatagramChannel>

最低0.47元/天 解锁文章
1374

被折叠的 条评论
为什么被折叠?



