物联网通信之Coap 协议

物联网通信之Coap 协议

Coap 简介

  • 名为受限制的应用协议,是UDP上的应用层协议。适用于小内存,低处理和低存储能力的设备。传输内容小巧精简,对于较大的数据可分块传输。客户端可以发送观察者请求,仅当被观察的数值变化时服务器才传回客户端新数值。

协议特点

  • 基于消息类型
  • 请求响应模型
  • 双向通信
  • 轻量、低功耗
  • 支持IP多播
  • 非长连接通信,支持受限设备
  • 支持观察模式
  • 支持异步通信
  • 支持Restful 接口

工作模式

CoAP是一个完整的二进制应用层协议,消息格式紧凑,默认运行在UDP上

###请求方式 和 消息类型

请求方式

  • 1- GET:获取资源
  • 2 -POST:创建资源
  • 3- PUT:更新资源
  • 4- DELETE:删除资源
定义了各种请求方式:
typedef enum {
    IC_GET = 1,
    IC_POST = 2,
    IC_PUT = 3,
    IC_DELETE = 4
} ICoAPRequestMethod;

应用场景:
coapMessage = [[ICoAPMessage alloc]initAsRequestConfirmable:YES requestMethod:IC_GET sendToken:YES payload:@""];
 [cO addOption:IC_URI_PATH withValue:self.textField.text];
  // add more Options here if required e.g. observe
 // [cO addOption:IC_OBSERVE withValue:@""];

消息类型

内部定义
/*
 * Type with +4 value for version 
 */
typedef enum {
    IC_CONFIRMABLE = 4,   
    IC_NON_CONFIRMABLE = 5,
    IC_ACKNOWLEDGMENT = 6,
    IC_RESET = 7
} ICoAPType;
  • CON:需要被确认的请求,如果CON请求被发送,那么对方必须做出响应
  • NON:不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应
  • ACK:应答消息,接受到CON消息的响应
  • 复位消息,当接收者接收到的消息包含一个错误,接收者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送

发送coap 消息

应用场景:

//发送消息到指定端口,并遵守协议
ICoAPMessage *iExchange = nil;
 if (!iExchange) {
       iExchange = [[ICoAPExchange alloc] initAndSendRequestWithCoAPMessage:iExchange toHost:@"4.coap.me" port:5683 delegate:self];
   }
   else {
       [iExchange sendRequestWithCoAPMessage:iExchange toHost:@"4.coap.me" port:5683];
   }

注释:在进行coap 请求的时候我们需要对 传递的 Message 进行数据的封装,然后使用既定的请求方式将消息传递出去,内部实现方法

发送消息之后需要实现的代理方法:

//接收到回复
- (void)iCoAPExchange:(ICoAPExchange *)exchange didReceiveCoAPMessage:(ICoAPMessage *)coapMessage {

    if (!exchange.isMessageInTransmission) {
        self.activityIndicator.hidden = YES;
    }
    
    count++;
    NSString *codeString = [self getCodeDisplayStringForCoAPObject:coapMessage];
    NSString *typeString = [self getTypeDisplayStringForCoAPObject:coapMessage];
    NSString *dateString = [completeDateFormat stringFromDate:coapMessage.timestamp];

    NSMutableString *optString = [[NSMutableString alloc] init];
    for (id key in coapMessage.optionDict) {
        [optString appendString:@"Option: "];
        [optString appendString:[self getOptionDisplayStringForCoAPOptionDelta:[key intValue]]];
        NSMutableArray *valueArray = [coapMessage.optionDict valueForKey:key];
        for (uint i = 0; i < [valueArray count]; i++) {
            [optString appendString:[NSString stringWithFormat:@" \nValue (%i): ", i + 1]];
            [optString appendString:[valueArray objectAtIndex:i]];
            [optString appendString:@"\n"];
        }
        [optString appendString:@"\n-----\n"];
    }
    if (exchange == iExchange) {
        [self.textView setText:[NSString stringWithFormat:@"(%i) Message from: %@\n\nType: %@\nResponseCode: %@\n%@\nMessageID: %i\nToken: %i\nPayload: '%@'\n\n%@", count, dateString, typeString, codeString, optString , coapMessage.messageID, coapMessage.token, coapMessage.payload, self.textView.text]];
    }
    NSLog(@"\nMessage: %@\n\nType: %@\nResponseCode: %@\nOption: %@\nMessageID: %i\nToken: %i\nPayload: '%@'", dateString, typeString, codeString, optString, coapMessage.messageID, coapMessage.token, coapMessage.payload);
}
//接受失败
- (void)iCoAPExchange:(ICoAPExchange *)exchange didFailWithError:(NSError *)error {
  //处理失败操作
}

HTTP和CoAP 之间的对比

  • HTTP代表超文本传输协议,CoAP代表约束应用协议;
  • HTTP协议的传输层采用了TCP,CoAP协议的传输层使用UDP
  • CoAP协议是HTTP协议的简化版
  • CoAP协议和HTTP协议一样使用请求/响应模型,拥有相同的方法
  • CoAP开销更低,并支持多播
  • CoAP专为资源构成应用而设计,如:IoT/WSN/M2M等…

Coap 和MQTT 之间的对比

  • MQTT协议使用发布/订阅模型,CoAP协议使用请求/响应模型;
  • MQTT是长连接,CoAP协议是无连接;
  • MQTT通过中间代理传递消息的多对多协议,CoAP协议是Server和Client之间消息传递的单对单协议
  • MQTT不支持带有类型或者其它帮助Clients理解的标签消息,CoAP内置内容协商和发现支持,允许设备彼此窥测以找到交换数据的方式
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值