当前位置: 首页 > news >正文

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() {@Overridepublic 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(); //实例化socketsocket.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 {@Overridepublic 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 {@Overridepublic 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流通道进行数据的传输。

http://www.lryc.cn/news/61749.html

相关文章:

  • 面试官:“请描述一下Android系统的启动流程”
  • k8s delete node 后 重启kubelet会自己加入到集群 ?
  • REXROTH液压方向阀安装须知
  • 【数据结构实验】哈夫曼树
  • 浏览器不好用?插件来帮忙
  • Qt Quick - 容器控件综述
  • 面试题30天打卡-day06
  • Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理
  • 项目管理中的必不可少的强大工具有哪些?
  • 嵌入式学习笔记——SPI通信的应用
  • .Net下企业应用系统架构构建心得
  • 【社区图书馆】关于Mybatis原理学习的读后感
  • C++ Primer阅读笔记--表达式和运算符的使用
  • npm install xxx的执行过程及示例
  • excel数据分析比赛
  • Git使用GitHub说明
  • 这些不可不知的JVM知识
  • 基于RK3568的Linux驱动开发——GPIO知识点(一)
  • 5.2.1二叉树的定义和基本术语
  • 动态组件、keep-alive的使用及自定义指令
  • 基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现
  • 问题排查记录-ffmpeg链接libavfilter和libavcodec:未定义的引用
  • 打印流,Properties类
  • TinyOS 配置教程
  • 【工作总结】后端开发人员的坏习惯
  • review
  • 【人工智能概论】 用Python实现数据的归一化
  • 【Python】matplotlib设置图片边缘距离和plt.lengend图例放在图像的外侧
  • oracle 11g等保加固
  • 【设计模式】设计模式之解释器模式