Netty 实现 UDP 通讯

一、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>
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值