转载请注明出处,原文地址: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:

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

源码结构如下图: 

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

        由于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 {@Overrideprotected void encode(ChannelHandlerContext ctx, Object obj, ByteBuf buf) throws Exception {MessagePack msgPack = new MessagePack();//序列化操作byte[] bytes = msgPack.write(obj);//netty操作,将对象序列化数组传入ByteBufbuf.writeBytes(bytes);}}   

解码:

public class MessagePackDecoder extends MessageToMessageDecoder {@Overrideprotected void decode(ChannelHandlerContext ctx, ByteBuf buf, List 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;

运行效果如: 

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

 

源码地址:

CSDN下载 积分不受我的控制

Github地址

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

 

 

更多相关文章

  1. Android 中Popwindow弹出菜单的两种方法实例
  2. Android中launcherMode="singleTask"详解【android源码解析六】
  3. Android中的ThreadLocal源码解析
  4. Android JNI 实例
  5. Android软Watchdog源码分析
  6. Android Framework源码下载及编译
  7. android 源码编译打包的apk出现accessed stale local reference
  8. webrtc——web与android,android间通信

随机推荐

  1. 人机融合智能时代的人心
  2. 探索人机未来:人机融合智能
  3. 第六集:人机融合—人、物、环境的复杂系统
  4. 基于深度学习的态势理解
  5. 人机融合为什么这么难?
  6. “中华优秀科普图书榜”
  7. 并非所有信息都是等价的:
  8. 人机工程简史
  9. 算法的秘密+
  10. 人的认知特性与分析