Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (四)C#端简介【附源码】

转载请注明出处,原文地址:https://blog.csdn.net/lucherr/article/details/88428244

Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (一)概述 【附源码】
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (二)Java端简介【附源码】
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (三)Android端简介【附源码】
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (四)C#端简介【附源码】

C#端对应的源码目录为NettyCSharp:

源码结构如下图: 

        由于0基础写的这个C# Demo,所以可能有些地方写的不专业,还望高手指出,好在C#和Java的语法差不多,代码和Java客户端也很类似,没有太难的地方,下面从本人角度说几个点

1.项目需要依赖DotNetty、MessagePack、EventBus,可以从NuGet获取:

Install-Package DotNetty.Codecs
Install-Package DotNetty.Handlers
Install-Package MessagePack
Install-Package EventBus

2.MessagePack的使用可以参考官方文档:https://msgpack.org/

编码:

public class MessagePackEncoder extends MessageToByteEncoder<Object> {

	@Override
	protected void encode(ChannelHandlerContext ctx, Object obj, ByteBuf buf) throws Exception {
		MessagePack msgPack = new MessagePack();
		//序列化操作
		byte[] bytes = msgPack.write(obj);
		//netty操作,将对象序列化数组传入ByteBuf
		buf.writeBytes(bytes);
	}
}

解码:

public class MessagePackDecoder extends MessageToMessageDecoder<ByteBuf> {
	
	@Override
	protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> objs) throws Exception {
		final byte[] bytes;
		final int length = buf.readableBytes();
		bytes = new byte[length];
		// 从数据包buf中获取要操作的byte数组
		buf.getBytes(buf.readerIndex(), bytes, 0, length);
		// 将bytes反序列化成对象,并添加到解码列表中
		MessagePack msgpack = new MessagePack();
		objs.add(msgpack.read(bytes));

	}
}

 3.使用EventBus更新界面:https://github.com/songdongsheng/EventBus

4.MessagePack实体类的属性需要是public的否则该字段的属性会变成null,这是本人目前还没搞明白的地方,希望明白人能给留个言,如:

        //事件类别
        [Key(0)]
        public EventType eventType;
        // 消息来源,如server,android etc
        [Key(1)]
        public String from;
        [Key(2)]
        public String time;

运行效果如: 

 

源码地址:

CSDN下载 积分不受我的控制

Github地址

PS:如果发现代码中有写的不对、有更好的实现方法或者文章中有误的地方,还望各位指出,我及时修改

 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值