华为云14天鸿蒙设备开发-Day9网络应用开发

      最后更新:2022-07-30 12:35:19 手机定位技术交流文章

      目录

      • 前言
      • 主要API
      • 一、UDP协议
        • 收发API
        • 1. 通信流程
        • 2.客户端实现
        • 3.服务器端实现
      • 二、TCP协议
        • 收发API
        • 1. 通信流程
        • 2.客户端实现
        • 3.服务器端实现
      • 二、MQTT协议
        • 帕霍MQTT简介
        • Paho MQTT API
        • MQTT客户开发委员会的实现
          • 主要代码
        • 测试MQTT客户端

      前言

      本文主要讨论如何使用开发板的Wi-Fi功能,为外部通信打开Wi-Fi。本文主要讨论了TCP、UDP和MQTT三种通信协议的使用。

      主要API

      本文件中主要使用的函数third_party/lwip/src/include/lwip/sockets.h
      socket()

      sock_fd = socket(AF_INET, SOCK_STREAM, 0) //AF_INT:ipv4, SOCK_STREAM:tcp协议

      描述:
      在网络编程中所需要进行的第一件事情就是创建一个socket,客户或服务器,你需要创建一个插座,函数返回插座文件描述符,类似于文件描述符。插座是一个结构,被创建在内核中。

      bind()

      bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))

      描述:
      绑定本地协议地址和插座,例如, 机器的22端口与插座相连.注意:为什么使用Socket的UDP客户端教程中客户端不需要调用绑定函数?这是因为如果调用绑定函数不绑定一个端口,当调用连接函数时,内核将暂时选择一个接口端口,因此可以不用绑定。服务器需要被绑定的原因是,所以客户端需要知道服务器正在使用哪个端口,所以需要提前绑定。

      listen()

      int listen(int s, int backlog)

      描述:
      此函数返回已经握手完成的连接的套接口。注意:此处的套接口不同于服务器开始创建的监听套接口,此套接口是已经完成连接的套接口,监听套接口只是用来监听。

      一、UDP协议

      UDP协议的概念没有太多讨论,属于基于数据的通信,没有连接不可靠,但快速。

      收发API

      sendto()

      int sendto ( socket s , const void * msg, int len, unsigned int flags,const struct sockaddr * to , int tolen ) ;

      描述:
      sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket。参数msg指向欲连线的数据内容,参数flags 一般设0。

      recvfrom()

      int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);

      描述:
      从指定地址接收UDP数据消息。

      1. 通信流程

      在这里插入图片描述

      2.客户端实现

      完成wifi热点连接需要以下步骤

      1. 通过索克接口创建一个索克,AF_INT意味着ipv4,SOCK_STREAM意味着使用tcp协议,SOCK_DGRAM意味着使用UDP协议
      2. 电话通过接口发送数据到服务端.
      3. 从接收服务端口调用数据 recvfrom

      3.服务器端实现

      服务器端需要绑定一个接口来监控客户端的连接请求。

      二、TCP协议

      协议的概念没有太多讨论, 属于流动通信 、 可靠的连接.

      收发API

      recv()

      int recv( SOCKET s, char *buf, int len, int flags)

      描述:
      recv函数从TCP连接的另一端接收数据

      send()

      int send( SOCKET s,char *buf,int len,int flags )

      描述:
      发送函数用于发送数据到TCP连接的另一端。

      1. 通信流程

      在这里插入图片描述

      2.客户端实现

      3.服务器端实现

      服务器端需要绑定一个接口来监控客户端的连接请求。
      完成wifi热点连接需要以下步骤

      1. 通过socket接口创建一个socket,AF_INT表示ipv4,SOCK_STREAM表示使用tcp协议
      2. 调用bind接口绑定插座和地址。
      3. 调用listen接口监视(指定端口监视),通知操作系统区域接受客户端链接的请求,第二个参数:指定队列长度
      4. 调用accept接口从队列中获取客户端请求链接
      5. 调用recv接口接收由客户端发送的数据
      6. 调用send接口将固定数据返回客户端

      二、MQTT协议

      协议概念就不多讲了,之前有总结过。 LiteOS SDK oc流程之MQTT
      在这里插入图片描述

      帕霍MQTT简介

      Paho是IBM在2011年建立的Eclipse开源项目,该项目包含多种语言编写的可用客户端。
      嵌入式C语言客户端地址: https://github.eclipse/paho.mqtt.embedded-c
      gitee页面为:bearpi-hm_nano/ third_party / paho_mqtt,你可以在此网页了解更多有关该图书馆的资料。
      Hung Mon系统相关移植文件:MQTTClient-CsrcliteOSMQTTLiteOS.c

      • MQTTClient一个高级别C++客户端程序,包含MQTTPacket。
      • MQTTClient-C:用MQTTPacket包装生成的高级C客户端程序
        • 样本目录提供了两个FreeRTOS和Linux的例子,分别支持FreeRTOS和Linux系统。
        • src目录提供了MQTTClient的代码实现功能,以及网络驱动器用于移植到相应的平台
      • MQTTPacket提供MQTT包的序列和逆序列,以及一些辅助功能。

      Paho MQTT API

      在MQTTClient中,相应的接口函数在h文件中声明。 我们只需要调用接口,我们不再需要自己实现MQTT协议。

      接口名 功能描述
      MQTTClientInit 创建一个客户端对象
      MQTTConnect 发送MQTT连接数据包
      MQTTConnectWithResults 发送MQTT连接包,等待返回
      MQTTPublish 发送MQTT发布数据包
      MQTTSetMessageHandler 发送每个主题消息处理函数
      MQTTSubscribe 发送MQTT订阅包
      MQTTSubscribeWithResults 发送MQTT订阅包并等待返回结果
      MQTTUnsubscribe 发送MQTT取消数据包
      MQTTDisconnect 发送MQTT去切断连接包和关闭连接

      MQTT客户开发委员会的实现

      代码是从样品中的iot_mqtt项目中提取出来。

      1. Wi-Fi是连接的,所以开发板是连接到网络
      2. 启动网络,因为 mqtt协议是建立在tcp协议上,它提供了一系列字符和读写接口
        建立和指定一个IP地址连接经纪人到1883端口.
      1. 使用MQTTClientInit建立MQTT客户端
      1. 配置客户端和数据,使用MQTTConnect开启MQTT连接。
      1. 开启订阅和发布
        订阅
        需要写回调函数作为消息处理函数.

      发布

      主要代码

      测试MQTT客户端

      测试开发委员会客户端首先需要一个服务端,一个经纪人,然后需要一个PC客户端来订阅开发委员会发行的主题消息。
      官方提供两个软件,你可以自己试一下:
      MQTT消息代理软件Mosquitto下载地址: https://mosquitto.org/download/
      Eclipse桌面客户端程序下载地址: https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1/
      有关调试的转录,请参阅官方案例页
      官方的逐步调试屏幕图页

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30922.html

          热门文章

          文章分类