Android硬件通信之 WIFI通信

一,简介

1.1 随着网络的普及和通信技术的发展,网络的传输速度也越来越快,wifi技术也还成为手机设备最基本的配置。我们可以通过wifi实现手机与手机之前的信息传输,当然也可以与任意一台有wifi模块的其它设备传输。

1.2 wifi与蓝牙是我们生活中最常见也是最常用的无线通信技术,当代智能家居基本也是基于这两种协议实现的。我们可以对比下两种技术,以便选择合适的通信方式:

对比蓝牙wifi
传输距离短,一般10m左右长,100m-400m左右
传输功耗功耗低,5mA功耗高,10-50mA
传输速度速度慢,1Mbps速度快,300Mbps
安全性能高,传输稳定低,密码被破解
应用领域穿戴设备,智能家居这些低功耗设备工厂设备,打印机这些大数据传输场景

1.3 随着物联网发展,无线通信技术已涉及到我们生活的各个角落,比如

工业领域

 智能家居

wifi通信成为这些物联网通信的一种重要技术,下面我们来看下wifi通信的详细步骤

二 wifi通信步骤

2.1 wifi通信前一定要使通信双方在一个局域网下,如果连接的是工厂机器,那机器上一般装有wifi模块

建立连接有两种方式

方式一:使手机和机器wifi都连接外网(就是你的室内的路由器的wifi),这样两个设备就在同一个局域网,就可以进行连接和通信

方式二:手机直接连接机器的wifi模块网络,这种有个弊端,无法上网,只能和机器的wifi传输数据。

所以一般步骤是先连接机器的wifi模块网络,然后打开网络配置网页,打开方式是浏览器输入wifi模块的IP地址(比如http://192.168.0.1),通过网络配置页面连接外网,这样手机既可以上网,请求服务器数据,又能和机器通信

2.2 创建IP,串口通讯地址,并通过Socket建立wifi连接

Runnable wifiConnectRunnable = new Runnable() {
	@Override
	public void run() {
		try {
			IP = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_IP, "192.168.2.1");
			PORT = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_PORT, "9100");
			socketAddress = new InetSocketAddress(IP, Integer.parseInt(PORT)); //获取sockaddress对象
			socket = new Socket(); //实例化socket
			socket.connect(socketAddress, 2000); //设置超时参数
			Log.e(TAG, "wifi: " + "wifi连接成功");
			handler.sendEmptyMessage(1);
		} catch (Exception e) {
			Log.e(TAG, "wifi: " + e.getMessage());
			e.printStackTrace();
		}
	}
};

2.3 获取Socket的IO流

mOutputStream = socket.getOutputStream();
mInputStream = socket.getInputStream();

2.4 读取wifi消息

private class ReadThread extends Thread {
	@Override
	public void run() {
		super.run();
		while (!isInterrupted()) {
			int size;
			try {
				byte[] buffer = new byte[512];
				if (mInputStream == null) return;
				size = mInputStream.read(buffer);
				if (size > 0) {
					String mReception=new String(buffer, 0, size);
					String msg = mReception.toString().trim();
					Log.e(TAG, "接收短消息:" + msg);
				}
			} catch (IOException e) {
				e.printStackTrace();
				return;
			}
		}
	}
}

 2.5 发送wifi消息

private class WriteRunnable implements Runnable {
	@Override
	public void run() {
		try {
			String cmd="KZMT;";
			Log.e(TAG, "发送短消息:" + cmd);
			mOutputStream.write(cmd.getBytes());
			mOutputStream.flush();
		} catch (IOException e) {

		}
	}
}

2.6 断开wifi的socket连接

/**
 * 关闭Wifi的Socket连接
 */
public void closeWifiStream() {
	try {
		if (mOutputStream != null) {
			mOutputStream.close();
			mOutputStream = null;
		}
		if (mInputStream != null) {
			mInputStream.close();
			mInputStream = null;
		}
		if (socket != null) {
			socket.close();
			socket = null;
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

 2.7 总结

wifi是一种局域网无线通信技术,所以必须使通信设备在同一个局域网段,然后维持一个socket长连接,获取IO流,通过IO流通道进行数据的传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14254.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据库多表操作】sql语句基础及进阶

常用数据库: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它是长期存储在计算机内、有组织、有结构的数据集合。数据库是信息系统的核心部分,现代软件系统中大量采用了数据库管理系统(DBM…

黑马在线教育数仓实战7

1. hive的相关的优化 1.1 hive的相关的函数(补充说明) if函数: 作用: 用于进行逻辑判断操作语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 nvl函数: 作用: null值替换函数格式: nvl(T value, T default_value) COALESCE函数 作用: 非空查找函数:格式…

Node【Express框架【二】】

文章目录 🌟前言🌟中间件🌟中间件函数🌟什么是中间件函数🌟中间件函数可以做什么 🌟Express中间件的类型🌟应用级中间件🌟路由器级中间件🌟错误处理中间件🌟内…

华为OD机试真题(Java),计算最大乘积(100%通过+复盘思路)

一、题目描述 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c; 如果没有符合条件的两个元素&#xff0c;返回0。 二、输入描述 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 < 数组长度<100&am…

设计模式 --- 概述

一、设计模式概述 1.1、软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 克里斯托夫亚历山大 &#xff08;Christopher Alexander&…

机器学习算法 决策树

文章目录 一、决策树的原理二、决策树的构建2.1 ID3算法构建决策树2.2 C4.5 算法树的构建2.3 CART 树的创建 三、决策树的优缺点 一、决策树的原理 决策树&#xff08;Decision Tree&#xff09;是一种非参数的有监督学习方法&#xff0c;它能够从一系列有特征和标签的数据中总…

项目五:使用路由器构建园区网

使用路由器构建园区网 1、新建拓扑2、配置交换机与主机3、配置路由交换机并进行通信4、通信测试5、配置路由器并进行通信测试1、配置路由器R-12、配置路由器R-2、R-33、通信测试 1、新建拓扑 依次添加四台主机&#xff0c;两台交换机&#xff0c;型号为S3700。两台路由交换机&…

归排、计排深度理解

归并排序&#xff1a;是创建在归并操作上的一种有效的排序算法。算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用&#xff0c;且各层分治递归可以同时进行。归并排序思路简单&#xff0c;速度仅次于快速排序&#xff0c;为稳定排序算法&#…

银行数字化转型导师坚鹏:数字化思维创新与金融业转型升级

数字化思维创新与金融业转型升级 课程背景&#xff1a; 很多金融机构存在以下问题&#xff1a; 金融机构的员工不知道需要具备什么样的数字化思维 不清楚数字化思维对金融机构转型升级的重要影响&#xff1f; 不清楚数字化背景下如何进行金融机构转型升级&#xff1f; …

flac格式如何转mp3,3招帮你搞定

flac格式如何转mp3&#xff0c;3招帮你搞定的方法来啦。当你的音频是flac格式是不是很头疼&#xff0c;又不知道怎么转mp3 。然后网上搜索出很多方法又不知道从哪个下手&#xff0c;是不是很疑惑&#xff1f;那今天就来看看小编推荐的方法吧&#xff0c;一定让你眼前一亮&#…

【机会约束、鲁棒优化】机会约束和鲁棒优化研究优化【ccDCOPF】研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

汽车制造数字化转型如何做?有哪些可行性案例?

引语&#xff1a;砥砺前行的先行者&#xff0c;为长期主义者带去曙光 国内制造企业亟需加速探索数字化转型之路。但是传统软件服务商提供的PLM、MES等系统已经无法满足企业个性化需求。通过传统软件服务商进行二次开发&#xff0c;成本高、周期长&#xff0c;难以适应迅速变化的…

威胁行为者针对云中的常见漏洞

Palo Alto Networks 已发布其第 42 单元云威胁报告的第 7 卷。该报告调查了 1300 多家组织。它分析了所有主要云服务提供商 (CSP) 的 210000 个云帐户、订阅和项目中的工作负载&#xff0c;为安全领导者和从业者提供了云安全的多方面视图。 云迁移的速度从 2021 年的 3700 亿…

图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现

文章目录 前言一、邻接矩阵1.概念2.图像示例3. 代码实现注意邻接矩阵的特点 二、邻接表1.概念2.图像示例3.代码实现邻接表的特点 前言 图是一种比较复杂的数据结构&#xff0c;每个结点之间可以有多种关系。 所以&#xff0c;一个图可以呈现出千奇百怪的形式。 对于不同的形式…

java调用webservicer的方法

对于使用 Webservicer的方式&#xff0c;一般采用 Java API调用的方式。Webservicer是一个运行在浏览器中的客户端程序&#xff0c;它可以通过 Webservicer的接口来访问服务器上的服务。 使用 Java调用 Webservicer有两种方式&#xff1a; 下面是一个简单的例子&#xff1a; 2、…

【Vue】学习笔记-初始化脚手架

初始化脚手架 初始化脚手架说明具体步骤脚手架文件结构 初始化脚手架 说明 Vue脚手架是vue官方提供的标准化开发工具&#xff08;开发平台&#xff09;最新版本是4.x文档Vue CLI 具体步骤 如果下载缓慢请配置npm淘宝镜像 npm config set registry http://registry.npm.taoba…

浅谈个人对“孔乙己的长衫“的感受

名人说&#xff1a;往者不可谏&#xff0c;来者犹可追。——《论语微子篇》 创作者&#xff1a;Code_流苏(CSDN) ★温馨提示&#xff1a;以下仅代表个人观点&#xff0c;不代表其它任何人看法。 目录 〇、缘由一、社会对于学历和职业之间的关系认知是怎样的&#xff1f;二、学…

【算法】从x的n次方看递归时间复杂度计算

从x的n次方看递归时间复杂度计算 1.循环 这个问题&#xff0c;最简单的办法是用循环 int pow1(int x,int n) {int result 1;for(int i0;i<n;i){result*x;}return result; }如上算法的时间复杂度为O(N)&#xff0c;但还是不够理想。这时尝试使用递归算法 2.递归1 int po…

51单片机入门

文章目录 一、安装keil5及proteus二、MCS-51单片机结构与原理(一).8051单片机基本组成(二).8051单片机引脚1.电源引脚2.时钟电路引脚3.控制信号引脚4.输入/输出端口 (三) 并行输入/输出端口结构 三、单片机cx51编程基础(一).变量定义(二).数据类型(三).存储类型(四).Cx51语言程…

快手社招Java后端开发岗面试,被问麻了

社招面试是基于你的工作项目来展开问的&#xff0c;比如你项目用了 xxx 技术&#xff0c;那么面试就会追问你项目是怎么用 xxx 技术的&#xff0c;遇到什么难点和挑战&#xff0c;然后再考察一下这个 xxx 技术的原理。 今天就分享一位快手社招面经&#xff0c;岗位是后端开发&…