2012年9月14日星期五

Android开发笔记(四)


Android开发笔记(四)
     -- Wifi-Direct开发问题总结篇

# Wifi-Direct开发概述
     在多台Android4.0+设备在没有外网辅助的环境下,实现互联组网,同时运行互发文件。这里提及的互联组网是自动的,包括创建,加入,退出,重建网络等多种操作,专门有一套自选举算法帮助完成。
     简单示例,假使现有设备A,B,C三台,该应用应用场景,如下:
     > 创建网络
          两种不同方式创建网络(Group群组),如下:
          1. A 主动创建群组createGroup,若成功则网络创建完成。
          2. 还有另一种情况,A主动连接connect B,B接受A连接请求且连接成功,则网络创建完成,同时B也加入了网络。定义此时设备A是Owner,作为网络创建者。不过,这种操作场景,也可能是在设备B端创建网络的,不一定设备A创建网络,这取决于Wifi-Direct协议这样定义:
          “The Wi-Fi Direct devices negotiate when they first connect to determine which device acts as an access point.”
          具体谁是Owner,影响元素包括,设备电量、信号强弱、机器是否处于省电模式等。PS. 在诸多的具体实验操作过程中得到验证的。

     > 加入网络
          按照以上第一种方式成功创建了网络Net,那么这时候设备B,C就分别可主动去发起请求连接网络Net,在设备A端只需确认接受请求。顺利的话则连接成功,那么此时三台设备ABC,就处于同一个网络,这时候彼此都可以传输数据,或是广播数据给同网络的设备。
          按照以上第二种方式创建了网络,则其他设备C加入网络方式类似,只要选择其中作为Owner的设备A或是B,对其发起连接请求。

     > 退出网络
          结合如上描述,退出网络同样有着两种情况,非Owner退出与Owner退出。
          1. 非Owner退出网络,只需要在对于设备做断开连接操作cancelConnect,如设备B或C退出网络,则设备A(Owner)的网络Net仍存在的。
          2. Owner退出网络,情况则比较复杂。设备A是网络Net的创建与拥有者,若退出了则网络即不存在了。在设备A退出之前需先通知设备B和C,然后让两者重新组建网络,由自选举算法推选出一个作为创建网络新的Owner,另一设备则加入网络(同上描述的加入网络)。 

     > 重建网络
          参照如上“退出网络”第二点描述。


# 遭遇的技术问题
Wifi-Direct(应用)开发过程遇到的技术问题,罗列如下:
1. 多设备间状态同步不及时

2. 系统广播Wifi-Direct消息不及时

3. Wifi-Direct消息缓存机制

4. socket(或channel)连接connect不成功
      “no route to host ... ”

(后续)

没有评论:

发表评论