局域网内android设备发现及通讯
2014-05-08 10:40
369 查看
最近一个项目需要实现在局域网内android手机操控另一个没有显示屏的android设备(音箱),具体实现就是手机端向音箱端发送命令字符串,音箱端通过解析命令字符串来完成操作,而手机端也要实时显示音箱当前的状态(正在播放什么歌曲之类的信息),这样就需要两边的交互要具有稳定性和快捷性,不然用户体验就会非常差。
博主替换了三套方案终于在稳定性和快捷性上基本达到要求,下面来简单说下这三套方案。第一套方案采用的是高通提供的aoojoyn框架,aoojoyn提供了一整套的局域网内设备互相发现以及通讯的功能,但是稳定性很差,经常会出现发现不了的情况,特别是在apk运行中切换网络后通常很难再互相发现,由于aoojony的资料太少以及想彻底解决这个问题需要花费大量的时间和精力,所以就放弃了这套方案。第二套方案是基于udp广播,通过手机端先发送全局广播,广播中携带了手机端的ip地址信息,音箱端接收到全局广播后向手机端所在的ip发送广播,手机端接收到音箱端发送的广播后也改为向音箱的ip发送广播,这样就实现了发现和通讯,这个方案虽然稳定性和速度比aoojoyn都提高了很多,但是也有问题,首先稳定性还是不够还是会有一段时间接收不到广播,其次手机端和音箱端的通讯很频繁,2秒一次,当udp广播发送太多后路由就会瘫痪,所以这套方案也不行。第三种是udp和socket组合,先通过udp来知道手机端和音箱端的ip地址,再通过socket来进行通讯,当手机端在连接后接收不到音箱端的心跳时就再发送udp全局广播,音箱端就会重启socket,这样稳定性和快捷性就大大提升了,也不会对路由器造成负担。
写的很乱,请见谅。
博主替换了三套方案终于在稳定性和快捷性上基本达到要求,下面来简单说下这三套方案。第一套方案采用的是高通提供的aoojoyn框架,aoojoyn提供了一整套的局域网内设备互相发现以及通讯的功能,但是稳定性很差,经常会出现发现不了的情况,特别是在apk运行中切换网络后通常很难再互相发现,由于aoojony的资料太少以及想彻底解决这个问题需要花费大量的时间和精力,所以就放弃了这套方案。第二套方案是基于udp广播,通过手机端先发送全局广播,广播中携带了手机端的ip地址信息,音箱端接收到全局广播后向手机端所在的ip发送广播,手机端接收到音箱端发送的广播后也改为向音箱的ip发送广播,这样就实现了发现和通讯,这个方案虽然稳定性和速度比aoojoyn都提高了很多,但是也有问题,首先稳定性还是不够还是会有一段时间接收不到广播,其次手机端和音箱端的通讯很频繁,2秒一次,当udp广播发送太多后路由就会瘫痪,所以这套方案也不行。第三种是udp和socket组合,先通过udp来知道手机端和音箱端的ip地址,再通过socket来进行通讯,当手机端在连接后接收不到音箱端的心跳时就再发送udp全局广播,音箱端就会重启socket,这样稳定性和快捷性就大大提升了,也不会对路由器造成负担。
写的很乱,请见谅。
相关文章推荐
- Android设备上使用WiFinspect抓取网络通讯包
- Android adb无法发现设备处理方法
- 使用QQ2013时连接Android物理设备Eclipse发现不了
- 发现一个好用的Android文件访问工具--es文件管理器,可以在同局域网下的浏览器中查看手机中的文件
- android 随手记 Ubuntu不能发现移动设备问题
- 对Android设备通过局域网ADB进行调试
- Android 蓝牙开发(二)开启蓝牙,获取状态,发现设备。
- Android/安卓开发之WIFI通讯(下)--与搜索到的设备进行通讯
- Android蓝牙开发教程(三)——蓝牙设备相互通讯
- 局域网设备发现之Bonjour协议
- android-USB-OTG 外部设备通讯 USB插拔检测
- Android获取局域网所有设备的ip地址
- BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题
- Android 6.0 Kotlin 蓝牙BLE扫描(改为指定时间没有发现新设备后停止扫描)
- 局域网内通过无线实现android设备的socket通信
- Android BLE最完整的工具类(扫描/连接/读写/通知设备),可以手机与设备进行通讯
- android设备终端与蓝牙模块(HC-06)的通讯编程思路
- 仿91助手的PC与android手机通讯(1) --- 检测设备插入
- Android蓝牙4.0BLE与智能设备间的通讯全解析
- MonkeyRunner源码分析之与Android设备通讯方式