Java IDE实现天气预报以及给指定手机发送验证码、MQTT自定义天气预报_通知notification的验证应用,自定义天气预报_云开处的博客-程序员宅基地

技术标签: java  实验  网络通信  

一、天气预报实现

1. 代码分析

  • 先准备一个URL类的对象 u
URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+weather);

网址的组成:协议://域名:端口号/虚拟路径?参数列表#锚点
协议: 用于计算机与计算机之间交流的协议,用于传输速率,传输编码,出错的控制等。
常用协议:
http:超文本传输协议,默认端口号:80
https:安全超文本传输协议,默认端口号:443
域名:ip地址的别名。ip地址是计算机在互联网中的唯一表示,192.168.1.1
端口号:范围:0-65535,其中0~1023有特殊含义。
虚拟路径:通过路径的方式,来管理服务器中的文件资源。
参数列表:向服务器发送的数据,每一个参数都是一个键值对,键和值之间通过=号连接,多个键值对之间通过&分割。

2.URL类

关键使用步骤
①先准备一个URL类的对象 u

URL url = new URL("网址内容");

②打开服务器连接,得到连接对象 conn

URLConnection conn = url.openConnection();

③获取加载数据的字节输入流 is

InputStream is = conn.getInputStream();

④将is装饰为能一次读取一行的字符输入流 br

BufferedReader br = new BufferedReader(new InputStreamReader(is));

⑤加载一行数据

String text = br.readLine();

⑥显示

System.out.println(text);

⑦释放资源

br.close();

3.API列表

智能机器人

  • 智能机器人API服务器地址:https://api.jisuapi.com/iqa/query
  • 参数列表
    appkey:秘钥,值为:62958a3a6ef3c56d
    question:与智能机器人的聊天内容 ,例如:北京天气

4.全部代码

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;
import java.util.Scanner;

public class Getweather {
    
	public static void main(String args[]) throws Exception 
	{
    
		String wea="";
		Scanner reader=new Scanner(System.in);
		System.out.println("请输入要查询天气的城市:");
		wea=reader.next();
		String weather=URLEncoder.encode(wea+"天气","UTF-8");
		//1. 	先准备一个URL类的对象 ur1
		URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+weather);
		//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();
	}
}

5.实现效果

在这里插入图片描述

二、给指定手机发送验证码

1.准备工作

  • 注册SMS短信通:官网

  • 查看短信接口密钥
    在这里插入图片描述

  • 下载程序包
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.执行代码

  • 新建Java项目
    在这里插入图片描述

  • 导入下载的文件

右击项目文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

修改test.java文件后运行

在这里插入图片描述

3.运行结果

在这里插入图片描述

三、MQTT自定义天气预报

1.MQTT

  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
  • 发布/订阅者模式
    MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。 在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

Broker代理:MQTT服务器,类似中间件,用来处理信息并发送到相应的订阅者
发布者:用于发布信息到代理上,发布者也可以是订阅者
订阅者:用于接受信息的客户端

2.MQTT服务器下载

①下载地址: 官网.

在这里插入图片描述
在这里插入图片描述

②创建实例

  • 进入到bin目录并在此处打开cmd执行以下命令
activemq-admin.bat create mybroker

创建实例成功后会在此目录下生成实例名的文件夹
在这里插入图片描述

③查看登录用户名、密码和端口号

  • 进入上面创建的实例目录下的users.properties,可以查看和修改用户名密码
    在这里插入图片描述
  • 在此目录下的activemq.xml中可以查看和修改各种协议连接的端口号,比如这里的mqtt协议的端口号默认是1883
    在这里插入图片描述
  • 在此目录下的jetty.xml中对后台管理员登录的ip和端口进行查看和修改,默认是8161
    在这里插入图片描述
    ④启动MQTT服务器
  • 进入到上面实例目录下mybrokerbin目录,打开cmd,执行如下命令:
mybroker.bat start

在这里插入图片描述
⑤登录管理员后台

  • 浏览器打开:http://localhost:8161/

输入管理员密码,默认是admin admin

在这里插入图片描述

  • 登录成功后进入管理页面
    在这里插入图片描述

Mqtt服务器搭建成功

3.MQTTBox客户端工具的安装

下载之后直接双击安装

  • 点击Create MQTT Client按钮,创建客户端
    在这里插入图片描述
  • 配置参数
    在这里插入图片描述
  • 协议选择mqtt/tcphost就是上面配置文件的端口,然后用户名和密码是上面配置文件的用户名和密码。
  • Connected绿色则表示配置成功,如果是红色的错误提示则配置的参数不对。
    在这里插入图片描述

4.建立天气预报主题

在这里插入图片描述

  • 左边的发布者在Topic to publish中输入主题,Payload Type代表发送的消息类型,在Payload中输入发送的内容,点击Publish发布
  • 右边的订阅者的部分,Topic to subscribe中输入主题,然后点击Subscribe进行订阅
  • 发布效果:
    在这里插入图片描述

在服务器后台管理页面下的Topics下也可以看到相应的主题了

在这里插入图片描述

四、参考资料

Java代码实现手机发送短信功能.
利用API实现获取城市的天气预报信息和给指定手机号码发送验证码——基于Java.
Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试

五、总结

初步学习了基于Java实现获取指定城市天气预报以及向指定手机号码发送信息,了解了URL类与智能机器人的使用。初步学习了MQTT协议,以及Windows安装使用MQTT协议和其客户端。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_48008050/article/details/112303512

智能推荐

LeetCode每日一题 (4) 剑指 Offer 20. 表示数值的字符串_bool isnumber(string s_战胜.的博客-程序员宅基地

题解:class Solution {public: // 1. "+""-" :必须出现在第一位或者e的后面; // 2. "." 只能出现一次,并且出现在e的前面; // 3. "e" 只能出现一次,只能出现在两个数字中间 bool isNumber(string s) { trim(s); bool numfg=false,dotfg=false,efg=false; for(int i=0;i<s.size();i._bool isnumber(string s

小甲鱼Python第一讲(我和Python的第一次亲密接触)_小甲鱼论坛python新版 csdn_有梦想的“咸鱼”的博客-程序员宅基地

1、在搜索栏中输入IDLE,打开Python编译器。2、在Python编译器中输入print(“Hello,World!”),梦一般的开始!3、(Windows快捷键)Alt+N 回到上一条语句,Alt+P去到下一条语句。4、在Python编译器中输入print(“Hello,World” * 8)会发生什么?输入print(“Hello,world\n” * 8)又会发生什么?第一节讲课后测试题1、Python是什么类型的语言?答:(1)Python是一种脚本语言,一旦写好了就可以运_小甲鱼论坛python新版 csdn

SpringBoot使用@Slf4j注解_萌翻天的博客-程序员宅基地

@Slf4j注解的作用相当于private final Logger logger = LoggerFactory.getLogger(当前类名.class);1、安装Lombok插件 2、添加pom依赖3、在代码中使用_slf4j注解

C语言实现n的阶乘(递归方法、非递归(主函数、函数调用))_Putarmor的博客-程序员宅基地

///递归实现int factorial(int a){ if (a == 1) return 1; else return a*factorial(a-1);}int main(){ int n,sum; scanf_s("%",&n); sum = factorial(n); printf("%d",sum); system("pause"); ////vs2013用scanf会出现警告,写代码还是

数据库大小写敏感问题_数据库大小写敏感吗_晴-_-天的博客-程序员宅基地

Oracle: 默认是大小写不敏感,表名、字段名等不区分大小写,小写字母会自动转换为大写字母; 需要用小写字母时需要使用双引号,或借助函數upper()和lower(),如where upper(col_name)=upper('&input'); drop table dsp_letter_dispatch_bill;----删除表“DSP_LETTER_DISPATCH_BILL”; drop_数据库大小写敏感吗

c语言输出100以内的素数存放数组中,c语言素数(c语言输出100以内素数)_独特三明治的博客-程序员宅基地

楼上的还可以具体一些,其实非常简单,如果一个数是素数,只要判断他是否能被2到这个数的开方之间的数整除就行了。int flag=0; if(m==2){ //先判断是不是2 flag=1; } else.#include int main(){ int a=0; int num=0; int i; printf("输入一个整数:"). i++){ if(num%i==0){ a++; } } ..._找出一百以内的质数,存放到数组中

随便推点

2022深圳(软考中级)系统集成项目管理工程师报名_软考集成项目管理工程师中级-程序员宅基地

系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术应用能力的人员,均可根据本人情况,报名参加相应专业类别、级别的考试。14:00-16:30,应用技术,笔试,4-5道案例题。l 关键突破——非项目管理知识点突破。l 关键突破——项目管理知识点突破。l 关键突破——项目管理知识点突破。..._软考集成项目管理工程师中级

android应用开发框架+即时通讯IM app开发(2)-从github上下载代码并导入library_CameloeAnthony的博客-程序员宅基地

接着上面一篇文章,我们的框架library需要导入开源库,jar包,以及可编辑的开源库都放到了library的依赖中。其中可编辑的开源库也就是说我们可以对原生的开源库进行一些编辑,也就牵涉到github上的文件的导入我们的Third-Part文件夹中。可以参考下面的文章,这是以前的笔记,具体转载地址没有记下来。从github下载两个开源项目:PagerSlidingTabS

#define定义数据溢出的问题-程序员宅基地

使用合泰单片机做一个小东西,使用#define TIMER_COUNT (30*60*1000)时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样。看来是stm32用多了,总以为#define是默认32位数据类型的。改成#define TIMER_COUNT (unsigned long)(30*60*1000)后结果就正常了。随便想纠正下网上很多帖子..._#define内存人数设置200,如果超过怎么办

Liblinphone 3.9.1中文--Modules--SIP address parser API_linphone api_ccfxue的博客-程序员宅基地

SIP address parser API SIP地址解析器API自定义 typedef enum _LinphoneTransportType LinphoneTransportType typedef struct SalAddress LinphoneAddress枚举类型 enum _Linpho_linphone api

施耐德电气助力汉威科技构建传感器“透明工厂”_构建透明工厂实例_美通社的博客-程序员宅基地

#subheadlines div {font-size: 17px;} #dvContent table[name=logo_release]+p+div[id^=prni_] {clear:both;} ..._构建透明工厂实例

推荐文章

热门文章

相关标签