物联网协议Coap之C#基于Mozi的CoapServer实现解析
目录
前言
在之前的关于物联网协议的介绍中,我们详细介绍了如何基于Java进行Coap协议的开发,由于一些项目原因,在项目中采用的不是Java的技术栈,而是ASP.NET Core,因此需要基于C#进行Coap协议的开发与实现。Coap本身是与编程语言无关的,不仅可以用Java进行实现,当然也可以使用C#,还可以是Python、GO等多语言,感兴趣的朋友可以自行问度娘,其实每一种语言都有相应的Coap实现。以下是
博主分享的博客,大家可以自己熟悉的编程语言所进行的开源实现, 。非常感谢他的认真整理。名称 | 开发语言 | CoAP版本 | 客户端/服务端 | 实现的CoAP特征 | 开源协议 | 项目链接地址 |
---|---|---|---|---|---|---|
Californium | Java | Client + Server | Observe, Blockwise Transfers, DTLS | EPL+EDL | ||
cantcoap | C++/C | Client + Server | BSD | |||
CoAP implementation for Go | Client + Server | Core + Draft Subscribe | MIT | |||
CoAP.NET | C# | , coap-13, coap-08, coap-03 | Client + Server | Core, Observe, Blockwise Transfers | 3-clause BSD | |
CoAPSharp | C#, .NET | Client + Server | Core, Observe, Block, RD | LGPL | ||
CoAPthon | Python | Client + Server + Forward Proxy + Reverse Proxy | Observe, Multicast server discovery, CoRE Link Format parsing, Block-wise | MIT | ||
Copper | JavaScript (Browser Plugin) | Client | Observe, Blockwise Transfers | 3-clause BSD | ||
eCoAP | C | Client + Server | Core | MIT | ||
Erbium for Contiki | C | Client + Server | Observe, Blockwise Transfers | 3-clause BSD | (er-rest-example) | |
ETRI CoAP | C | Client + Server | Core, Observe, Block | Commercial | ||
iCoAP | Objective-C | Client | Core, Observe, Blockwise Transfers | MIT | ||
jCoAP | Java | Client + Server | Observe, Blockwise Transfers | Apache License 2.0 | ||
libcoap | C | Client + Server | Observe, Blockwise Transfers | BSD/GPL | ||
microcoap | C | Client + Server | MIT | |||
nCoap | Java | Client + Server | Observe | BSD | ||
node-coap | Javascript | Client + Server | Core, Observe, Block | MIT | ||
Ruby coap | Ruby | Client + Server (david) | Core, Observe, Block, RD | MIT, GPL | ||
Sensinode C Device Library | C | Client + Server | Core, Observe, Block, RD | Commercial | ||
Sensinode Java Device Library | Java SE | Client + Server | Core, Observe, Block, RD | Commercial | ||
Sensinode NanoService Platform | Java SE | Cloud Server | Core, Observe, Block, RD | Commercial | ||
SMCP | C | Client + Server | Core, Observe, Block | MIT | ||
SwiftCoAP | Swift | Client + Server | Core, Observe, Blockwise Transfers | MIT | ||
TinyOS CoapBlip | nesC/C | coap-13 | Client + Server | Observe, Blockwise Transfers | BSD | |
txThings | Python (Twisted) | Client + Server | Blockwise Transfers, Observe (partial) | MIT |
由于对ASP.NET Core并不是很熟悉,在进行基础入门编程学习之后后,我们基于Mozi开源框架进行扩展扩展实现,
。原本的项目包含的内容比较多,我们可以在它的基础之上进行简化,改造成符合自己需求的项目。本文以CoapServer为主线,介绍CoapServer使用C#语言的定义以及后台资源管理类的定义和实现。一、C#的Coap Server实现
本节将重点介绍CoapServer在C#中的设计与实现,由于Coap协议在Java的篇章中有所涉及,相信大家对Coap已经不再陌生,因此这里不再对Coap进行赘述。下面依然采用熟悉的OOA即面向对象分析,采用面向对象的方式进行源代码分析。
1、CoapServer相关类
在CoapServer中,在这个工程中,主要涉及的类如下:
序号 | 类名 | 说明 |
1 | CoAPServer | CoAP的服务端 |
2 | CoAPResource | 类似于Java的中controller |
3 | ResourceManager | 资源管理器,可以理解成IOC容器 |
2、主要类解析
CoapServer是服务端程序中最重要的类,其中主要定义了后端的服务,以及绑定了Coap协议,用于接收前端来自Client的请求。
从类的继承体系来说,CoapServer是CoAPPeer的子类,有必要对CoAPPeer进行一个全面的说明。
从以上的代码中可以发现,上述类也是定义了CoAP协议工作所必须要的一些属性,比如端口、协议、数据包内容等等。CoapServer的属性代码如下:
3、资源控制器定义
每一个后台都会对应一个资源控制器,这里也不例外,我们来看下C#的实现。在CoapResource中同样的定义了get、post、put、delete四种请求方法。如下图所示:
4、ResourceManager管理器
每个业务接收类都对应一个Resource,而这些Resource必须要使用一个统一的容器管理起来,可以把它理解成Java对应的IOC容器,程序运行时会自动把相关资源管理起来。资源描述如下
资源管理器的核心管理方式也是采用反射的机制,如下:
二、CoapServer生命周期
在上面的代码中,对CoapServer的编码实现进行了介绍,下面将采用熟悉的调试方法来进行调用跟踪,在关键代码中进行深度讲解。
1、Server创建代码
创建Server的代码如下:
2、服务端创建
第一步、调用构造方法
第二步、指定端口启动
第三步、设置socket,绑定协议
3、绑定endpoint
4、准备接收请求
总结
以上就是本文的主要内容,本文以CoapServer为主线,介绍CoapServer使用C#语言的定义以及后台资源管理类的定义和实现。行文仓促,定有不当之处,欢迎各位朋友专家批评指正。
- 点赞
- 收藏
- 关注作者
评论(0)