熟悉HTTP&MQTT协议-实践练习

熟悉HTTP&MQTT协议-实践练习



任务摘要

一. 安装Java开发环境和Java IDE编程工具 Eclipse 或 IDEA,基于HTTP协议(严格地说是 “REST接口规范”)读取互联网上web服务网站实现:
1)读取指定城市的天气预报信息;
2)给指定手机号码发送验证码;
二. 学习和熟悉MQTT 协议
1)在本机上安装MQTT服务器和客户端软件,练习消息发布与订阅。
2)利用网上提供的MQTT服务,编写MQTT客户端程序(python、java或c#、c/c++, 任意一种编程语言),自定义一个主题,完成订阅与发布。


一、HTTP协议简介

超文本传输协议
超文本传输协议(HTTP)是用于从万维网服务器传输超文本到本地浏览器的传送协议。超文本传输协议(HTTP)是面向事务的(Transaction-oriented),应用层协议规定了在浏览器和服务器之间的请求和响应的格式和规则,它是万维网上能够可靠交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
在这里插入图片描述
主要特点

  1. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  2. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  3. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  4. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  5. 支持客户/服务器模式(C/S)
    协议基础
    在这里插入图片描述
    HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
    运作方式
    在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
    在这里插入图片描述
    工作机制
    HTTP的工作过程使用请求 /响应握手方式: ①客户发生连接 ,双方建立起一 个 TCP连接;②客户发出请求;③服务器处理请求 ,返回应答;④服务器关闭连接。
    在这里插入图片描述

二、HTTP协议实践

安装Java开发环境和Java IDE编程工具 Eclipse 或 IDEA,基于HTTP协议(严格地说是 “REST接口规范”)读取互联网上web服务网站实现

由于之前已经安装过了相关的开发软件,这里就不细说其安装了,大家看可以找“度娘”,进行安装操作。

1.读取天气预报信息

代码实现

package com.kkb.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Demo4 {
    
    

	public static void main(String[] args) throws IOException {
    
    
		//关键使用步骤:
		//0.	将发送给图灵机器人的文字转化为URL编码
		String question = URLEncoder.encode("山东天气", "UTF-8");
		//1. 	先准备一个URL类的对象 u
		URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+question);
		//2. 	打开服务器连接,得到连接对象 conn
		URLConnection conn = url.openConnection();
		//3. 	获取加载数据的字节输入流 is
		InputStream is = conn.getInputStream();
		//4.	将is装饰为能一次读取一行的字符输入流 br
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		//5.	加载一行数据
		String text = br.readLine();
		//6.	显示
		System.out.println(text);
		//7.	释放资源
		br.close();
	}

}

运行程序
在这里插入图片描述
结果显示
在这里插入图片描述
String question = URLEncoder.encode("输入查询地名+天气", "UTF-8");处,可以查询到天气。例如:“重庆天气”、“山东天气”等等。

2.指定手机发送验证码

代码实现(为避免号码泄露,这里号码用01表示)

package com.kkb.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Demo5 {
    
    

	public static void main(String[] args) throws IOException {
    
    
		//关键使用步骤:
		//1. 	先准备一个URL类的对象 u
		URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=01010101010&code=zxw9420");
		//2. 	打开服务器连接,得到连接对象 conn
		URLConnection conn = url.openConnection();
		//3. 	获取加载数据的字节输入流 is
		InputStream is = conn.getInputStream();
		//4.	将is装饰为能一次读取一行的字符输入流 br
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		//5.	加载一行数据
		String text = br.readLine();
		//6.	显示
		System.out.println(text);
		//7.	释放资源
		br.close();

	}

}

运行程序
在这里插入图片描述
结果显示
在这里插入图片描述
URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=***********&code=******");
在第一处“*”输入指定的手机号码;在第二处“ * ”输入所需要发送的验证码;
至此,使用HTTP协议读取指定城市的天气预报以及给指定手机发送验证码的实践就完成了。

三、熟悉MQTT协议

1.MQTT协议的简述

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
在这里插入图片描述

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;

基本特点
MQTT是一种发布/订阅传输协议,基本原理和实现如下
在这里插入图片描述
简单示例
MQTT 协议主要是根据以下情况设计的:
M2M(Machine to Machine),机器或设备间端到端通信,比如传感器之间的数据通讯。
设备(Machine)中,例如传感器,硬件能力很弱,协议要考虑尽量小的资源消耗,比如计算能力和存储等。
根据 MQTT 的基础了解后并结合简单的架构,在这里做一个简单的示例图,可以更直观的理解MQTT协议的通信模型。MQTT Broker 就选择 EMQ 作为示范。比如有1个温度传感器(1个Machine),1个移动设备,1个电脑,一个服务器(3个Machine),都可以得到或者显示温度传感器的温度值,需要先通过 MQTT 协议subscribe(订阅)一个比如叫 temperature 的 topic(主题)如下:
在这里插入图片描述
MQTT控制报文
MQTT协议工作在TCP之上,端和代理之间通过交换预先定义的控制报文来完成通信。MQTT报文有3个部分组成,并按下表顺序出现:
在这里插入图片描述
所有的MQTT控制报文都有一个固定报头,期格式如下:
在这里插入图片描述

2.MQTT服务器

下载Apache Apoll
https://pan.baidu.com/s/1c2NJmJe.
解压下载后的文件到当前文件夹
在这里插入图片描述
解压后
在这里插入图片描述
环境配置
配置Java编译环境JDK;
下载JDK
在这里插入图片描述
双击JDK,会显示安装界面
在这里插入图片描述
点击下一步,可以更改安装路径
在这里插入图片描述
点击下一步,等待安装,完成后点击关闭
在这里插入图片描述
配置JAVA_HOME;

C:\Program Files\Java\jdk-12.0.1
PATH
%JAVA_HOME%\bin\

电脑桌面,找到控制面板
在这里插入图片描述
选择系统安全
在这里插入图片描述
搜索高级系统设置,弹出界面如下
在这里插入图片描述
选择高级,点击环境变量
在这里插入图片描述
配置Java_home环境变量
在系统变量中找,或者新建
在这里插入图片描述

没有找到。我们新建
双击编辑系统变量;点击新建
输入C:\Program Files\Java\jdk-12.0.1 PATH %JAVA_HOME%\bin\在这里插入图片描述
点击确定即可
验证JDK是否安装成功
点击左下角状态栏,输入cmd
在这里插入图片描述
以管理员身份运行,在弹出的界面的输入
java -version
在这里插入图片描述
至此,有关JDK的相关配置就完成了。
在解压文件中,进入文件bin下,使用cmd运行apollo.cmd create mybroker;
在这里插入图片描述
在运行apollo.cmd,出现如示图像,则配置成功
在这里插入图片描述
开启apollo服务
打开文件所处路径并复制
在这里插入图片描述
使用cmd,进入文件路径
在这里插入图片描述
运行apollo.cmd create mybroker
在这里插入图片描述
在bin目录下生成mybroker文件,配置信息在mybroker/etc/apollo.xml,用户名和密码在mybroker/etc/users.properties。默认的用户名:admin 密码:password
在这里插入图片描述
在这里插入图片描述
在文件夹中,进入mybroker\bin中,运行.\apollo-broker-service install,.\apollo-broker-service start
在这里插入图片描述
在计算机管理处,找到apollo,并启动该服务
在这里插入图片描述
在浏览器中输入http://127.0.0.1:61680,进入apollo的登录页面
在这里插入图片描述
默认的Username=admin;Password=password;输入即可登录
至此,MQTT的服务器就搭配完成了。

3.客户端搭配

下载客户端
https://pan.baidu.com/s/1mi5mdRi.
解压
解压到当前文件夹
在这里插入图片描述
运行Paho程序
在这里插入图片描述
添加连接并进行相关配置
在这里插入图片描述
输入用户名与密码
在这里插入图片描述
连接成功后,显示如下
在这里插入图片描述

4.消息的发布与订阅

消息订阅
在这里插入图片描述
主题发布
在这里插入图片描述
接收内容
在这里插入图片描述


四、总结

HTTP协议是万维网常用的超文本传输协议,所以在使用的时候比较轻松。对于MQTT协议,在环境配置的时候出了点问题,百度了很久才解决的,然后在搭配服务器时,由于路径出现中文,导致cmd命令无法识别,系统找不到指定路径,更改路径后就可以了。但是在搭配客户端环境的时候,也出现了问题。最后参考了大佬的博客,然后就可以了。虽然问题多,花费了较长时间,但是完成后还是挺开心的。最后,希望这篇文章对你有所帮助。

五、参考资料

超文本传输协议.
HTTP 教程.
lMQTT.
MQTT协议中文版.
MQTT 协议基本介绍.
MQTT协议从服务端到客户端详解.
图解MQTT服务器环境搭配.
Windows 下 MQTT 服务器搭建之Apollo.

猜你喜欢

转载自blog.csdn.net/QWERTYzxw/article/details/111829932