赞
踩
一,简介
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流通道进行数据的传输。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。