C# dotnetty的关于UDP通讯

之前使用dotnetty时 , 碰到了需要UDP通讯的问题 , 上网查询了一系列资料 , 并没有明确UDP该怎么使用的代码 . 自己下载了java netty的使用文档 , 再尝试一番后才试出dotnetty UDP通讯的方法 .

使用前直接在nuget程序包中搜索DotNetty添加引用.

初始化部分:

var group = new MultithreadEventLoopGroup();
            IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 8510);
            IEventLoopGroup eventgrop = new MultithreadEventLoopGroup();
            try
            {
                var bootstrap = new Bootstrap();
                bootstrap
                    .Group(group)
                    .Channel<SocketDatagramChannel>() //UDP连接方式
                    .Option(ChannelOption.SoBroadcast, true) //广播形式获取数据
                    .Option(ChannelOption.SoReuseaddr, true) //可以复用端口号
                    .Handler(new ActionChannelInitializer<IChannel>(channel =>
                    {
                        IChannelPipeline pipeline = channel.Pipeline;
                        pipeline.AddLast(new LoggingHandler());
                        pipeline.AddLast(new TestHandler());
                    }));
                channel = await bootstrap.BindAsync(clientEndPoint); //绑定本地端口号开始监听

                if (!channel.Active)
                {
                    await channel.CloseAsync();
                }

在以上中 , 通过 .Channel() 和 .Option(ChannelOption.SoBroadcast, true) 配置来使用UDP通讯 , 下边是TextHandler的代码.

class TestHandler : SimpleChannelInboundHandler<DatagramPacket>
    {
        IChannelHandlerContext ctx;
        public override bool IsSharable => true;

        protected override void ChannelRead0(IChannelHandlerContext ctx, DatagramPacket packet)
        {
            var byteBuffer = packet.Content; //将收到的数据转换为IByteBuffer , 可通过ReadByte()方法读取单个byte类型 , 此外还有ReadInt() , ReadString()等.

        }
        public override void ChannelReadComplete(IChannelHandlerContext ctx)
        {
            ctx.Flush();
        }

        public override void ExceptionCaught(IChannelHandlerContext ctx, Exception e)
        {
            Console.WriteLine("{0}", e.ToString());
            ctx.CloseAsync();
        }
    }

using DotNetty.Buffers;
using DotNetty.Transport.Channels;
using DotNetty.Transport.Channels.Sockets;
上述类使用这三个引用 , 将其加入就可以.

以上是dotnetty使用UDP的方法 , 在下也属于小白一枚 , 如不清楚地方可以留言讨论.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值