博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络通信编程学习笔记(七):Java与MQTT
阅读量:4232 次
发布时间:2019-05-26

本文共 3984 字,大约阅读时间需要 13 分钟。

文章目录

一、两个Java的简单程序

1.1 给指定手机号码发送验证码

  1. 安装JDK、JRE和开发工具IntellJ IDEA 或Eclipse
  2. 代码
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 {
URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=这里填手机号&code=这里填验证码"); URLConnection conn = url.openConnection(); InputStream is = conn.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8")); String text = br.readLine(); System.out.println(text); br.close(); }}
  1. 结果

在这里插入图片描述

1.2 读取指定城市的天气预报信息

package Weather;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 Weather_Report {
public static void main(String args[]) throws Exception {
weather(); email(); } //获取天气信息 public static void weather() throws Exception{
//关键使用步骤: //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(); } //发送验证码 //number 是目标手机 //code 是验证码 public static void email() throws IOException{
//关键使用步骤: //1. 先准备一个URL类的对象 u URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=***********&code=******"); //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(); }}

运行结果

在这里插入图片描述

二、MQTT

2.1 MQTT简介

MQTT( Message Queuing Telemetry Transport,消息队列遥测传输协议 ),是一种基于发布/订阅( publish/subscribe )模式的 “ 轻量级 ” 通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

  • MQTT 的特点:
    MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
    MQTT 协议当前版本为,2014 年发布的 MQTT v3.1.1。除标准版外,还有一个简化版 MQTT-SN,该协议主要针对嵌入式设备,这些设备一般工作于 TCP/IP 网络,如:ZigBee。
    MQTT 协议运行在 TCP/IP 或其他网络协议,提供有序、无损、双向连接。其特点包括:
  1. 使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦;
  2. 对负载内容屏蔽的消息传输机制;
  3. 对传输消息有三种服务质量(QoS):
    ——最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1;
    ——至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1;
    ——只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别;
  4. 数据传输和协议交换的最小化(协议头部只有2字节),以减少网络流量;
  5. 通知机制,异常中断时通知传输双方;

2.2 使用 apollo 搭建 MQTT 服务器

  1. 下载 apollo 链接: 提取码:vy47
    解压压缩包,然后用cmd进入到 apollo 下面的 bin 文件夹下,并使用命令 apollo.cmd create test,创建成功如下图所示。

在这里插入图片描述

  1. 开启 appllo 服务
    使用 cmd 进入到 apache-apollo-1.7.1\bin\test\bin 路径下,运行命令 .\apollo-broker-service install 和 .\apollo-broker-service start 即可。

在这里插入图片描述

在服务里可以看到apollo服务开启

在这里插入图片描述

在 MQTT 服务器打开之后,选择 configration 下选择 apollo.xml 文件,修改 <host_name> 属性为服务器 ip(192.168.0.2)<web_admin> 同步修改,以及 tcp 节点下将默认的 tcp://0.0.0.0:61613 修改为服务器的 ip,以供局域网使用,点击 Save 保存,即可在局域网内使用服务器的 ip 登录。

2.3 用 MQTT 客户端创建连接

下载客户端链接: 提取码:go0f

解压后,双击运行 paho.exe。

添加连接。

在这里插入图片描述

点击 选项 ,勾选上登录,并输入用户名和密码

在这里插入图片描述

输入服务器地址(刚刚的 apollo.xml 文件内的),然后点击 连接 ,即可连接成功。

在这里插入图片描述

服务器显示连接的 IP 及端口号等信息。

在这里插入图片描述

2.4 消息发布与订阅的基本操作

按照上述方法再额外建立一个连接(可以使用同一局域网的 PC 连接服务器,前提是安装了客户端,这里我没有别的 PC ,就用本机额外建立了一个连接)。

在这里插入图片描述

在这里插入图片描述

这里显示的是:同一主机使用不同的端口连接了服务器。

客户端 test1:订阅 hello 主题

点击 + 按钮,添加一个主题,然后点击 订阅 即可(说明:由于并没有 hello 主题发出,所以没有收到消息,其它客户端发布主题后,该客户端会收到消息)。

在这里插入图片描述

客户端 test2:发布 hello 主题

编辑 主题 和 消息 ,并点击 发布 ,历史记录中显示已发布。

在这里插入图片描述

由于客户端 test1 已订阅了 hello 主题,所以同时会收到该消息。

转载地址:http://lnpqi.baihongyu.com/

你可能感兴趣的文章
Java基础入门(四)
查看>>
Java基础入门(十)
查看>>
Java基础入门(完结篇)
查看>>
Java进阶之面向对象(一)——继承
查看>>
Java进阶之自定义ArrayList&斗地主发牌案例
查看>>
JavaWeb之filter&listener&文件上传
查看>>
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
转载:在 Windows 10 下遇到移动硬盘不自动分配盘符的问题
查看>>
阻抗匹配基础
查看>>
DDR2 SSTL_18标准
查看>>
DDR3的DQS_p/n信号电平摆幅变化不一致现象
查看>>
北大旁听生中的历史名人
查看>>
大唐凌烟阁开国廿四将
查看>>
Access数据库出现"Selected collating sequence not supported by the operating system."错误
查看>>
逻辑思维测试题
查看>>
如何用Easy CHM制作CHM格式电子书(帮助文档)
查看>>
为什么学习python
查看>>
华为进不了美国,并不是贸易保护这么简单
查看>>
markdown文件的基本常用编写语法(图文并茂)
查看>>