梅科尔工作室-看鸿蒙设备开发实战14天笔记(七)-网络应用开发
###本文章仅整理视频笔记及对一些地方的解释,如果想看详细内容,请在鸿蒙开发者学堂搜索鸿蒙设备开发###
###本文章图片来自视频后PDF文档,本文侧重代码讲解###
1.UDP客户端
1.1.UDP协议相关API
1.2.UDP客户端创建流程
1.3.实例代码
1.4.代码讲解
引入库,定义服务端端口号,定义要发送的内容
定义相关任务
创建结构体内部存储服务端相关信息,信息如上图,使用ipv4协议,端口号htons(8888),使用htons将主机字节顺序转换为网络字节顺序,详细请搜索htons函数,inet_addr将网络地址转换为二进制数字。连接wifi使用的是你想要连接的wifi的信息。
创建套接字,第一个参数ipv4协议,如果是AF_INET6则是ipv6协议,第二个参数是UDP数据报,如果是SOCK_STREAM则是TCP流。
将数据发送到服务端并接收返回的字符串,中间还有延迟,recvfrom经常处于阻塞态,只有你发送一个信息,它才返回一个信息。bzero清空recvBuf(接收的数据),发送函数第一个参数套接字,第二个发送的数据,第三个长度,第四个一般是0,第五个服务端信息,第六个,存储服务端信息的结构体大小。
最后关闭套接字
2.TCP服务端
2.1.TCP协议相关API
2.2.TCP服务端创建流程
2.3.实例代码
2.4.代码讲解
引入库并创建任务,定义端口号,最大监听数,服务端返回信息
定义服务端地址信息,客户端信息并连接wifi
接下来以公司前台转接电话为例进行讲解
公司买了个电话并且是ipv4,TCP流的电话,并且找了一张卡卡的信息中间几行,之后将卡插入电话中(bind绑定ip等)
招了个前台转接员最大转接数为第二个参数10个,之后开始工作,当有服务端请求时,转接的id为new_fd并打印转接成功。
客服进行回话,回话的人是前台转接的id,new_fd(不是套接字),之后进行接收客户端信息,返回客户端信息。
最后关闭转接。
3.TCP客户端
3.1.相关API
3.2.相关流程
与第二大点同
3.3.实例代码
3.4.代码讲解
TCP客户端只需要修改之前的UDP客户端代码即可,你可以选择将UDP客户端代码文件夹直接复制并粘贴到example,之后进行修改,这样之后也可以对UDP客户端代码进行复习,也可以选择直接修改UDP客户端代码。
将创建任务代码中的UDP全部改为TCP,你也可以不改。
创建套接字第二个参数改为TCP流,SOCK_STREAM
连接TCP服务端,UDP客户端没有,所以发送接收数据时需要写地址信息
将sendto的to去掉,recvfrom的from去掉,参数的地址信息去掉
不要忘了修改BUILD.gn
4.UDP服务端
4.1.相关接口
4.2.通信流程
与第一大点同
4.3.代码实例
4.4.代码讲解
UDP服务端只需要修改之前的TCP服务端代码即可,你可以选择将TCP服务端代码文件夹直接复制并粘贴到example,之后进行修改,这样之后也可以对TCP服务端代码进行复习,也可以选择直接修改TCP服务端代码。
对任务名进行修改
创建套接字第二个参数STREAM改为DGRAM
注释掉监听代码以及转接代码
在recv后加from,send后加to,new_fd改为套接字,后面都写上地址,并每一次循环清一次recvfrom
关闭的也是套接字。
5.MQTT客户端
5.1.MQTT介绍
5.2.paho MQTT文件介绍
5.3.paho MQTT相关接口函数
5.4.实例代码
5.5.代码讲解
引入库文件,定义最大接收,发送长度,创建相关任务
连接wifi,初始化网络NetworkInit,连接并打印。MQTTClient相当于套接字,创建了个client之后操作函数第一个参数经常用到这个。网络连接第二个参数需要与自己的主机ip一致。
初始化MQTT客户端,对相关客户端信息进行填写(版本等),之后连接MQTT,连接失败通过goto跳转到begin重新连接。
之后进行订阅,订阅失败返回begin,订阅函数第二个是订阅的主题,可以接收服务端发布的消息。
MQRTT发布相关代码,发布的主题,需要与服务端订阅的主题一致这样,服务端才能订阅客户端发布的信息。
mosquitto需要进行配置打开conf文件,通过查找快捷键搜索allow_an找到相关代码并修改
并且搜索listener修改为以下代码,位置可以通过下图第一行进行定位。