当前位置: 首页 > news >正文

手机网站开发协议网站设计服务要不要交文化事业建设费

手机网站开发协议,网站设计服务要不要交文化事业建设费,如何自己搭建网站,wordpress wp_links目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中,关于在ASP.Net Co…

目录

前言

一、CoapClient相关类介绍

1、CoapClient类图

2、CoapClient的设计与实现

3、SendMessage解析

二、Client调用分析

1、创建CoapClient对象

2、实际发送请求

3、Server端请求响应

4、控制器寻址

总结 


前言

        在之前的博客内容中,关于在ASP.Net Core当中使用Coap协议进行开发进行一篇博文的探讨物联网协议Coap之C#基于Mozi的CoapServer实现解析。这边博文主要是讲解了在ASP .Net Core当中如何使用C#编程语言进行CoapServer的实现,对其涉及的相关类进行了简单的讲解,相信大家对其实现和协议实现由了一定的认识。但是基于C#的Client的设计与实现,以及详细的调用方式并没有进行讲解。

        本文是上篇博客的继续介绍篇,依然使用ASP .NET Core,采用C#编程语言进行开发,重点介绍CoapClient的C#代码实现以及使用Get方法实际发送请求,详细阐述与CoapServer端的交互调用。便于各位读者在使用过程中对Coap的调用机制有更深的了解和掌握。

一、CoapClient相关类介绍

        在Coap中,无论是使用Java进行开发,还是C#,或者使用PHP,必须要使用Client对象进行请求的发送,即Get、Post、Put、Delete四种请求。因此在C#中有必要对CoapClient进行一下简单介绍,同时可以对比一些在不同的编程语言中,实现上的有所区别。

1、CoapClient类图

        第一步来看一下CoapClient的类图,详细如下图所示:

         相信看过CoapServer的设计的朋友们一定记得,CoapServer的父类是什么?不记得的不要紧,下面将贴出重点代码:

 public class CoAPServer : CoAPPeer

        是的,各位没有看错,CoapServer也是CoAPPeer的子类,其实不管是客户端还是服务端,都是需要进行通讯的,二CoAPPeer就承接了这部分工作的。

        CoAPPeer是对等的,双方都需要实现协议中共同的部分。

2、CoapClient的设计与实现

        言归正传,这里还是要把CoapClient类的设计好好介绍一下,毕竟Client负责了所有终端与服务端的交互。也非常有必要介绍一下这位主角。

 public class CoAPClient : CoAPPeer{private bool _randomPort = true;private CoAPTransmissionConfig _transConfig = new CoAPTransmissionConfig();private MessageCacheManager _cacheManager;private ulong _packetReceived;//private ushort _remotePort = CoAPProtocol.Port;//private string _remotehost = "";/ <summary>/ 远端服务器地址/ </summary>//public string RemoteAddress { get { return _remotehost; } protected set { _remotehost = value; } }/ <summary>/ 远端服务器端口/ </summary>//public ushort RemotePort { get { return _remotePort; } protected set { _remotePort = value; } }/// <summary>/// 服务端回应请求/// </summary>public MessageTransmit Response;/// <summary>/// 发起请求/// </summary>public MessageTransmit Request;private byte[] _token;/// <summary>/// 统一通信Token/// </summary>public byte[] Token { get => _token; set => _token = value; }

        通过代码可以看到,在CoapClient中,定义了请求和响应对象,以及token对象。 在这个类当中,不仅定义了Client的相关属性,同时还定义了丰富的方法,基本上是围绕Get、Post、Put、Delete等四个方法当中。下面来详细介绍一下:

        以Get为例,这里就定义三个重载方法,对于实际使用过程当中几乎可以覆盖相关场景,如果您还觉得不够,可以自行扩展以更好的贴近自己的实际需求。

序号方法参数说明
1Get(string url) Get方法,默认消息类型为<see cref="CoAPMessageType.Confirmable"/>
2Get(string url, CoAPMessageType msgType)

url,地址中的要素会被分解注入到Options中

msgType消息类型

3Get(string url, CoAPMessageType msgType, IList<CoAPOption> options)

url,地址中的要素会被分解注入到Options中

msgType消息类型

options 选项集合

        当然,不论是Get还是Post方法,其底层其实都用调用SendMessage()方法,因此SendMessage才是核心的方法。

3、SendMessage解析

以下是核心的发送消息的方法,代码如下:

/// <summary>/// </summary>/// <param name="url">地址中的要素会被分解注入到Options中,参见<see cref="Get(string, CoAPMessageType, IList{CoAPOption})"/></param>/// <param name="msgType">消息类型,默认为<see cref="CoAPMessageType.Confirmable"/></param>/// <param name="msgId"></param>/// <param name="token"></param>/// <param name="method"></param>/// <param name="options"></param>/// <param name="payload"></param>/// <returns></returns>public ushort SendMessage(string url, CoAPMessageType msgType, ushort msgId, byte[] token, CoAPRequestMethod method, IList<CoAPOption> options, byte[] payload){CoAPPackage cp = new CoAPPackage{Code = method,Token = token,MesssageId = msgId,MessageType = msgType ?? CoAPMessageType.Confirmable};UriInfo uri = UriInfo.Parse(url);if (!string.IsNullOrEmpty(uri.Url)){if (cp.Code == CoAPRequestMethod.Post || cp.Code == CoAPRequestMethod.Put){cp.Payload = payload;}//注入URI信息cp.SetUri(uri);//发起通讯if (!string.IsNullOrEmpty(uri.Host)){if (options != null){foreach (var opt in options){cp.SetOption(opt.Option, opt.Value);}}SendMessage(uri.Host, uri.Port == 0 ? CoAPProtocol.Port : uri.Port, cp);}else{throw new Exception($"DNS无法解析指定的域名:{uri.Domain}");}}else{throw new Exception($"分析链接地址:{url}时出错,请检查URL地址是否合法");}return cp.MesssageId;}
序号参数名说明
1url请求地址
2msgType消息类型
3msgId消息id
4token通信令牌
5method请求方法,如get、post、put、delete等
6options选项集合
7payload请求载荷,简单理解就是请求参数包

二、Client调用分析

        CoapClient的请求调用,在C#中的实现与Java是类似的,也是要创建CoapClient对象,然后向Server端发送请求,下面会针对这个调用流程进行介绍。

1、创建CoapClient对象

        创建client对象的关键代码如下:

CoAPClient cc = new CoAPClient();
//本地端口
cc.SetPort(12340);cc.Response += new MessageTransmit((x, y, z) => {Console.ForegroundColor = ConsoleColor.DarkGreen;Console.WriteLine(z.ToString(CoAPPackageToStringType.HttpStyle));Console.ForegroundColor = ConsoleColor.Gray;
});
cc.Request += new MessageTransmit((x, y, z) =>
{Console.WriteLine(z.ToString(CoAPPackageToStringType.HttpStyle));
});cc.Start();

         这里与CoapServer的启动流程是一样的,同样会创建Udp的Socket,然后绑定endPoint。这样即完成了CoapClient对象的创建及启动准备。

2、实际发送请求

        在创建了Client对象和启动后,即可进行相应方法的调用。下面以get方法为例,调用一个之前我们用C#写好的一个Resource,访问代码如下:

cc.Get("coap://127.0.0.1:5683/core/time?type=1",CoAPMessageType.Confirmable);

         然后调用下面的消息发送方法进行消息的发送。

 调用Socket对象进行消息的发送。

3、Server端请求响应

        以上步骤一个请求就已经发往了Server,下面来看一下Server端的Resoure寻址过程。首先在CoapServer当中,有一个Socket_AfterReceiveEnd的方法,用来接收请求,如下过程进行请求包的一个解析和转换。

         这里很关键,这里就是把之前通过ResourceManager管理器统一管理的控制器进行获取,类似与Java当中反射和IOC的概念。这里千万要理解。

4、控制器寻址

        在上面的过程当中会调用Invoke方法进行反射调用方法,下面来具体看一下控制器寻址怎么实现的。首先在Invoke的之后,实际会调用下面的管理器核心方法。

        这个方法是定义在ResourceManager这个类当中的。然后根据请求路径去IOC容器中寻找匹配的资源对象。

 随后完成实际方法的调用,一气呵成。这种调用方法与java的反射有异曲同工之处。

总结 

        以上就是本文的主要内容, 本文是上篇博客的继续介绍篇,依然使用ASP .NET Core,采用C#编程语言进行开发,重点介绍CoapClient的C#代码实现以及使用Get方法实际发送请求,详细阐述与CoapServer端的交互调用。便于各位读者在使用过程中对Coap的调用机制有更深的了解和掌握。行文仓促,难免有疏漏和不当之处,如果不足,欢迎各位朋友在评论区之处。

http://www.yayakq.cn/news/815777/

相关文章:

  • 做招商加盟做得比较好的网站付费推广平台有哪些
  • 石家庄网站推广专业天河区门户网站招生考试
  • 企业对比网站网站域名dns
  • 无锡网站制作工具如何做seo网站
  • 做网站在哪里做比较好营销网站建设都是专业技术人员
  • 不断推进门户网站建设行政机关网站建设
  • 公司自己的网站叫什么组建网站需多少钱
  • 电商网站建设概念centos7.4 wordpress
  • 做海购的网站宜兴市城乡建设局网站
  • 做一个论坛网站多少钱手机网站注册页面
  • 本人想求做网站建设工程合同范本
  • 做盗版网站清远城乡住房建设部网站
  • 百度可以做网站吗重庆网站制作企业
  • 英文阿里巴巴网站建设wordpress标题优化
  • 网站免费注册会员怎么做无锡网站建设365caiyi
  • 台州网站建设公司哪家好上传网站根目录
  • 外国网站设计素材江苏省建设工程注册中心网站
  • 学校网站欣赏中文物联网设计
  • 网站建设多少钱一个月网站推广的名词解释
  • 有哪些做兼职的设计网站有哪些工作wordpress flashfxp
  • 做网站的几个软件寺院网站模板
  • 静态网站建设的PPT网建教程
  • 资阳市网站seo找人做网页需要多少钱
  • 一级a做爰片免费网站黄copyright技术支持 东莞网站建设
  • 网页浏览器缩略词网站优化排名软件网
  • 网站设计创新点怎么写网站建设的可行性报告
  • 网站被墙怎么办网站报价清单
  • 深圳网站搭建多少钱做网站的类型
  • 小企业网站价格外贸营销词
  • 广告行业网站建设方案网站建设需申请注册域名