一种基于Android的无线局域网通信方法与流程

文档序号:12478081阅读:1335来源:国知局
一种基于Android的无线局域网通信方法与流程

本发明属于网络技术领域,尤其涉及一种基于Android的无线局域网通信方法。



背景技术:

在生产与生活当中,人与人之间离不开沟通与交流,随着科学的发展、技术的进步人们的沟通方式也在发生着潜移默化的改变。随着网络技术和软件技术的不断进步,越来越多的人通过社交网络来结识新的朋友,代表软件有:MSN、QQ、微信、易信等,但他们只是对传统社交网络的拓展。当今网络技术逐步朝着“高速”与“无线”的趋势过渡发展,无线网络以其独有的优势得到企业与个人的青睐。

无线网络包含有:WLAN(无线局域网)、无线个人区域网、无线广域网和固定接入无线技术。其中,无线局域网发展最为迅速,产品也日渐成熟,它以IEEE 802.11b标准作为传输协议,支持最大的传输速率达到11Mbit/s。随后于1999年成立的WiFi联盟对无线局域网的发展提供可靠的保障。

相较于有线局域网,无线局域网具有以下优点:

移动性灵活:WLAN提供了对终端移动性的支持,去掉了布线的束缚,终端可在AP覆盖范围内任意移动,并且在保持网络连接不中断的情况下可在不同AP间移动切换。

传输速率高:WLAN目前的传输速率可达11Mbit/s,通过应用OFDM技术的WLAN,可高达54Mbit/s,远远超过有线网络的传输速率。

资源共享:在不超过规定容量要求的基础上,多个终端可共用一个AP。

易于扩展:因为没有布线的局限,用户可随意地增添、重新建立工作站。

基于网络通信的便捷性与经济性的需求,通过移动终端在无线局域网实现通信具有其存在的价值与意义。一方面,局域网内部进行通信,避免了同外网的数据交互,在安全性方面提供了很大的保障;另一方面,无线局域网以其灵活性、共享性、扩展性的优势,给企业和个人在生产与生活中带来极大的便利。同时,智能4G手机和无线网络技术的发展与制度的健全,移动终端基于无线局域网通信将有更广阔的发展前景与应用价值。

智能手机的发展日新月异,使其对操作系统的性能要求也逐步提高,Android操作系统因其开源免费的优势得到众多开发者的青睐,厂商可根据市场的需求自主开发出对用户有吸引力的应用软件,例如:QQ、微信、知乎等等。而基于Android操作系统的无线局域网通信软件的研究与开发,对人们进行安全、短距离、低成本、高速率的通信需求将具有很大的用途。

无线局域网的起源最早可追溯到第二次世界大战,该技术在军事战争方面的应用。随后20世纪70年代到90年代,以太局域网发展迅猛,无线局域网因其无需布线、灵活性强的优势得到市场的认可。但当时的无线局域网产品采用IEEE802.3的标准,易受微波噪声干扰、传输速率较低、各厂商产品间互不兼容等劣势,使其发展受到很大的限制。1990年11月,美国国际电子电机学会成立802.11委员会,开始制定无线局域网标准,才进一步促进无线局域网的高速发展。迄今已推出多项标准,例如:IEEE802.11、IEEEE802.11a、IEEE802.11b、IEEE802.11g等,下面选择几项进行重点介绍:

IEEE802.11b:该标准是无线局域网标准中最著名、普及率最广的标准。其载波的频率为2.4GHz,数据传输速率为11Mbit/s,传输距离为50米至150米。通过该标准推出的产品运用于家庭、办公室、车站、酒店等诸多场合。

IEEE802.11a:该标准采用了与原始标准相同的核心协议,工作频段为5.725-5.85GHz,数据传输速率最大可达54Mbit/s,传输距离为10米至50米,支持语音、数据、图像等众多业务。

IEEE802.11g:该标准频段与802.11b相同,为2.4GHz,最大传输速率可达54Mbit/s传输距离为50米至100米。

IEEE802.11n:该标准是近几年IEEE推出的新的802.11标准,目前仍处于草案阶段,传输速率预计将高达540Mbit/s。若该标准顺利推出,那它将比802.11b快上50倍,而比802.11g快将近10倍,数据将可被传输到更远的距离。

国内企业在无线局域网的应用起步相对早些。在国外设备厂商的技术支持下,广州钢铁集团的各分厂、清华紫光旗下的紫光大厦和蓝润大厦等诸多地方都已通过无线局域网实现无线联网。于2001年起,国内无线局域网的应用推广出现了竞争的势态,参与市场竞争的运营商有中国网通基于802.11b无线协议推出的“无线伴侣”、中国电信也在基于802.11b协议推出了“天翼通”等。

以上方案存在的主要局限性在于:

1、无线网络接入依赖于网络服务运营商(ISP)提供的服务,连接到不同ISP接入点上的终端间进行通信时,需跨网进行,且访问控制受到ISP限制。

2、无线网络拓扑依赖于接入点(AP)的布置,所有的终端都连接到对应的AP上,因此在AP覆盖范围外的终端相互间无法通信。

3、无线网络的移动性、适用性局限大,通信终端智能在固定假设的AP基站覆盖范围内移动,不适用于野外、临时区域及其他不具备架设基站条件的区域。



技术实现要素:

本发明的目的在于提供一种基于Android的无线局域网通信方法,旨在解决目前基于安卓系统搭建的无线局域网内的通讯节点列表获取、显示通讯节点信息、显示未查看消息数量、修改个人信息、节点加入或离开通讯状态的改变、接收发消息等技术不太完善的问题。

本发明是这样实现的,

一种基于Android的无线局域网通信方法,该基于Android的无线局域网通信方法包括:

基于Android的UDP Socket通信;

实时发现有新的节点加入移动网络并更新节点列表;

有节点离开时能实时做出响应并告知该网络中的用户,实现跨网段的通信。

进一步,基于Android的UDP Socket通信方法为:

在广播数据包之前,发送方和接收方分别创建一个Socket对象,并指定DatagramPacket数据包存储要被发送的数据,在定义UDP Socket服务时,对一个固定的端口进行监听,在收发数据的过程中,调用Socket对象的send方法发送数据包,使用receive()方法对发送数据包发送过来的数据包进行接收,同时receive()进行阻塞;

当消息从网络中到达后,消息所包含的数据被UDP的receive()方法返回前,数据存储在一个先进先出的接收数据队列中,一个UDP Socket所接受的数据存放在相应的唯一一个消息队列中,每个消息都关联自己源地址信息,每次receive()调用只返回一条消息,receive()方法中在一个缓存区消息的长度大小为n,而接收队列中的第一条消息的长度大于n,则receive()方法只返回这条消息的前n个字节,超出部分自动放弃且没有消息提示。

进一步,接收方操作步骤为:

A、启动Socket连接;

B、创建一个multicastSocket对象,并设定监听端口;将UDP端口编号加入到组播组;

C、创建一个byte数组进行接收,获得用户ID号和获得请求方的ip地址,并接收信息;

D、创建一个空的DatagramPackage对象;

E、使用receive()方法对发送方所发送的数据进行接收,同时进行阻塞;

F、解析接收到的数据信息;所述数据信息包括接收方ID、发送方ID、用户的昵称、用户的IP地址、接收信息的时间;

G、关闭Socket连接,离开组播组。

进一步,发送方操作步骤为:

a、启动Socket连接;

b、创建一个multicastSocket对象,加入到组播组;

c、创建一个InetAddress;

d、将消息转为byte类型;

e、创建一个DatagramPacket对象,并指定其要被发送到的网络中的目的地址以及端口号;

f、调用multicastSocket对象的send方法发送数据;

g、关闭Socket连接,离开组播组。

进一步,实时发现有新的节点加入移动网络并更新节点列表方法包括:

初始化指令缓存、检测网络状态,获取本地IP地址、启动Socket连接、注册广播接收器、获取自身信息、向网络发送心跳包,并注册自己;

所述初始化指令缓存包括初始化用户注册指令缓存、初始化信息发送指令缓存;

检测网络连接状况,获取本地IP地址,其方法为:

首先,设置用户上网权限,允许Internet访问;

然后,检测所有的网络接口,得到每一个网络接口绑定的IP地址;

最后,判断如果该IP地址是IPv4地址且不是回送IP,则该IP地址就是该网络接口的IP。

所述获得自身相关信息包括连接标志号、昵称及通讯节点数量等,更新注册命令的用户数据和更新通话命令的用户数据;

所述向网络发送心跳包,并注册自己为定时向对方发送心跳包,告知对方自己仍“在线”,心跳包发送时间间隔为10秒钟。

进一步,有节点离开时能实时做出响应并告知该网络中的用户,实现跨网段的通信方法包括:

向网络发送心跳包,并注册自己,定时向对方发送心跳包的形式,告知对方自己仍“在线”,心跳包发送时间间隔为10秒钟;

检查用户列表是否有超时用户,当某个节点退出移动网络,所述的某个节点需要广播一个remove消息告知网络中所述的某个节点外的节点,所述的某个节点外的节点通过广播接收器收到所述的某个节点的消息,立即做出响应,将退出的节点从所述的某个节点外的节点列表中删除;用户是否在线检测时间上限为15秒,若超过15秒未作出响应则从列表中清除该用户;

通知有新用户加入或退出,当一个新的节点加入移动网络时,所述的新的节点向网络中广播一个HELLO类型的消息,来告诉当前网络中所述的新的节点外的节点自己的加入,当所述的新的节点外的节点收到所述的新的节点发送过来的消息时,将其加入到所述的新的节点外的节点列表中,同时回送一个HELLO_ACK类型的消息,让新加入的节点知道当前网络中有已存在的节点,并快速建立起新加入的节点列表。

进一步,基于Android的无线局域网通信方法的基于Android的无线局域网通信系统设置有表现层、基于UDP协议的Socke通信模块、SQLite数据库和Android操作系统;

表现层用于提供用户操作体验的图形化界面,显示节点列表和消息编辑与记录,应用层的图形化界面设置有节点列表层、个人信息设置层、通信记录层、

节点列表层用于显示当前局域网络中可进行通讯的网络节点列表,以ListView控件来显示所有的节点信息,每个ListItem包含的节点信息设置有:

IPAdress:用于显示网络中到达节点的IP地址;

User ID:用于确认用户的ID,节点注册登录,作为自己在该网络中唯一标识自己的字符串或者数字;

getmessagesCountBuId:用于显示某个用户发来信息,而自身未查看接收的消息的数量统计;通过点击列表中的一节点,跳转到聊天界面,进行信息的编辑发送与接收查看;

个人信息设置层用于用户根据自身的主观意愿选择喜爱的头像以及昵称编辑,当用户个人信息设置成功后,在下次与网络中其他用户聊天通讯中,显示在聊天界面当中;

通信记录层用于用户编辑消息和显示本机与指定终端间信息往来的详情记录,记录包含的字段内容有:消息内容、发送方与接收方的用户ID、发送或接收消息的具体时间;并将这些通信记录保存在SQLite数据库中;

Android操作系统:用于负责界面组件的API,数据发送API,SQLite数据库操作API,API包括一组核心的包和类模块、清单文件的XML元素及属性声明模块、各类意图模块、资源文件的XML元素和属性声明及访问形式模块、可被应用程序请求的各类授权模块以及授权执行模块;

基于UDP协议的Socke通信模块:用于满足同个WLAN环境中,同个网段或不同网段间用户的通信过程,通过Android提供的数据包发送的接口,接受发送并对数据包内容处理,达到节点间的互发现与通讯;

SQLite数据库:用于通过Android自带的SQLite相关接口进行数据储存和处理。

进一步,Android操作系统分为四层,由高到低分别为应用层、应用框架层、系统运行库和linux内核层;

应用层包括主显示屏、电话本模块、联系人模块、时钟模块、天气模块;电话本模块、联系人模块、时钟模块、天气模块均集成在应用层集成板上并均与显示屏连接;

应用框架层包括Activity管理器、内容提供器、位置管理器、通知管理器、包管理器、资源管理器、电话管理器、视图系统、窗口管理器;Activity管理器、内容提供器、位置管理器、通知管理器、包管理器、资源管理器、电话管理器、视图系统、窗口管理器均集成在应用框架层集成板上;

视图系统包括按钮组件、文本框组件、编辑框组件、下拉列表组件、时间选择器组件;

系统运行库包括Surface Manager组件、SQLite数据库、SGL组件、3D libraries组件;

Linux内核层包括音频驱动模块、Bindre驱动模块、摄像头模块、显示驱动模块、闪存模块、键盘模块、电源管理模块、Wi-Fi驱动模块。

本发明提供的基于Android的无线局域网通信方法,由笔记本电脑或者带有WLAN热点功能的智能手机建立一个局域网,将测试手机通过WiFi连接加入指定的WLAN。之后打开应用软件,系统会检测到当前移动网络中存在的通信节点,当有新的节点加入或离开网络,系统会自动更新其节点列表,为了方便不同用户间能快速识别对方的身份信息,可在信息设置中选择头像和修改昵称。随后用户可向局域网中其他用户发送或接收消息,实现基于Android的局域网络通信的目的;本发明详细分析了Android系统架构,应用程序的组成,着重探讨了Activity和BroadcastReceiver的工作原理和使用技巧,并以此为基础,采用Java为软件编程语言,无线WLAN技术为硬件支持,合理调用Android提供的组件内容,实现基于无线局域网的通信系统;通过使用该应用软件,用户在户外活动过程中,在共享的局域网环境下了解到当前无线网络中其他可通讯用户的基本信息并进行接收发消息,无需再借助于掌机、对讲机等移动设备实现通讯的需求,极大的方便用户在户外的通讯交流。通过系统开发与后期的实验测试,该应用在无障碍物条件下通讯距离大于等于250米,有障碍物条件下可穿越三堵10~20公分混凝土墙,完成大致20米距离内的通讯需求,完全可应用于野外考察、灾区救援等场合。

附图说明

图1是本发明实施例提供的基于Android的无线局域网通信方法流程图。

图2是本发明实施例提供的接收方和发送方操作步骤流程图。

图3是本发明实施例提供的节点加入流程图。

图4是本发明实施例提供的节点离开流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图对本发明的应用原理作进一步描述。

如图1所示,本发明实施例的基于Android的无线局域网通信方法包括:

S101:基于Android的UDP Socket通信;

S102:实时发现有新的节点加入移动网络并更新节点列表;

S103:有节点离开时能实时做出响应并告知该网络中的用户,实现跨网段的通信。

基于Android的无线局域网通信系统设置有表现层、基于UDP协议的Socke通信模块、SQLite数据库和Android操作系统;

表现层用于提供用户操作体验的图形化界面,显示节点列表和消息编辑与记录,应用层的图形化界面设置有节点列表层、个人信息设置层、通信记录层、

节点列表层用于显示当前局域网络中可进行通讯的网络节点列表,以ListView控件来显示所有的节点信息,每个ListItem包含的节点信息设置有:

IPAdress:用于显示网络中到达节点的IP地址;

User ID:用于确认用户的ID,节点注册登录,作为自己在该网络中唯一标识自己的字符串或者数字;

getmessagesCountBuId:用于显示某个用户发来信息,而自身未查看接收的消息的数量统计;通过点击列表中的一节点,跳转到聊天界面,进行信息的编辑发送与接收查看;

个人信息设置层用于用户根据自身的主观意愿选择喜爱的头像以及昵称编辑,当用户个人信息设置成功后,在下次与网络中其他用户聊天通讯中,显示在聊天界面当中;

通信记录层用于用户编辑消息和显示本机与指定终端间信息往来的详情记录,记录包含的字段内容有:消息内容、发送方与接收方的用户ID、发送或接收消息的具体时间;并将这些通信记录保存在SQLite数据库中;

Android操作系统:用于负责界面组件的API,数据发送API,SQLite数据库操作API,API包括一组核心的包和类模块、清单文件的XML元素及属性声明模块、各类意图模块、资源文件的XML元素和属性声明及访问形式模块、可被应用程序请求的各类授权模块以及授权执行模块;

基于UDP协议的Socke通信模块:用于满足同个WLAN环境中,同个网段或不同网段间用户的通信过程,通过Android提供的数据包发送的接口,接受发送并对数据包内容处理,达到节点间的互发现与通讯;

SQLite数据库:用于通过Android自带的SQLite相关接口进行数据储存和处理。

Android操作系统采用分层的架构,Android分为四层,由高到低分别为应用层、应用框架层、系统运行库和linux内核层;

应用层包括主显示屏、电话本模块、联系人模块、时钟模块、天气模块;电话本模块、联系人模块、时钟模块、天气模块均集成在应用层集成板上并均与显示屏连接;

应用框架层包括Activity管理器、内容提供器、位置管理器、通知管理器、包管理器、资源管理器、电话管理器、视图系统、窗口管理器;Activity管理器、内容提供器、位置管理器、通知管理器、包管理器、资源管理器、电话管理器、视图系统、窗口管理器均集成在应用框架层集成板上;

视图系统包括按钮组件、文本框组件、编辑框组件、下拉列表组件、时间选择器组件;

系统运行库包括Surface Manager组件、SQLite数据库、SGL组件、3D libraries组件;

Linux内核层包括音频驱动模块、Bindre驱动模块、摄像头模块、显示驱动模块、闪存模块、键盘模块、电源管理模块、Wi-Fi驱动模块。

本发明提供的基于Android的无线局域网通信方法,由笔记本电脑或者带有WLAN热点功能的智能手机建立一个局域网,将测试手机通过WiFi连接加入指定的WLAN。之后打开应用软件,系统会检测到当前移动网络中存在的通信节点,当有新的节点加入或离开网络,系统会自动更新其节点列表,为了方便不同用户间能快速识别对方的身份信息,可在信息设置中选择头像和修改昵称。随后用户可向局域网中其他用户发送或接收消息,实现基于Android的局域网络通信的目的;本发明详细分析了Android系统架构,应用程序的组成,着重探讨了Activity和BroadcastReceiver的工作原理和使用技巧,并以此为基础,采用Java为软件编程语言,无线WLAN技术为硬件支持,合理调用Android提供的组件内容,实现基于无线局域网的通信系统,通过系统开发与后期的实验测试,该应用软件可应用于野外考察、灾区救援等场合。

下面结合相关技术与理论对本发明的应用原理作进一步描述。

1、本发明先围绕Android相关技术与理论进行介绍,主要包括简介、Android系统架构、应用程序分析,后对UDP Socket通信以及SQLite数据库进行分析与探究。

1.1Android相关技术与理论

1.1.1Android简介

Android是Google公司基于Linux操作系统开发的移动端平台,主要运用于平板电脑和智能手机。Android开发包含四大组件,分别为活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)、内容提供商(Content Provider),是首个为移动端提供完整的开发环境、代码开源的平台。它具有以下的平台优势:

(1)开放性:谈论Android平台的优势,首先关注的则是其开放的平台特征,它允许任何移动终端厂商加入进来,为其平台的发展与拓广积累人气、补充资源。

(2)不受束缚:相较于以往手机应用的发展很大程度上受到运营商的制约,如今的用户可以很方便的连接网络,尤其是随着EDGE、HSDPA等技术带来2G、3G移动网络的发展与运用。

(3)丰富的硬件:Android平台开放的特征也为其带来丰富的硬件设备,众多的厂商为当今的安卓市场带来功能各具特色的产品。

(4)方便开发:Android平台为第三方开发商提供广阔、自由的开发环境,相较于iphone的各种条条框框阻扰,Android的开发环境为其带来更多新颖多样化的软件应用。

(5)Google应用:Android平台背后有强大的Google支撑,先进技术的渗透、杰出人才的输送、系统的组织管理,Android平台与Google优质服务的衔接将带来更多有价值的应用产品。

1.1.2Android系统架构

Android的系统架构同其他操作系统相同,都是采用分层的架构。Android分为四层,由高到低分别为应用层、应用框架层、系统运行库层和linux内核层。

(1)应用

Android平台中所有的应用程序都是通过Java语音编写的,例如电话本、联系人、时钟、天气等。开发人员可根据自己的项目需求为产品引入更多功能丰富多样化的模块内容。

(2)应用框架

应用程序框架层是Android开发所需要应用到的一系列API框架,其架构的设计简化了组件的重复使用,例如视图(Views)就包含了按钮、文本框、编辑框、下拉列表、时间选择器等组件。应用框架也为开发人员提供了各种管理器来配合应用程序的快速开发,这对于Android平台应用程序的扩充与推广提供了极大的便利。

(3)系统运行库

系统运行库包含的C/C++库可为不同的组件提供调用,开发人员可通过应用框架来调用这个功能库。核心库中主要包含Surface Manager、SQLite数据库、SGL、3D libraries等。

(4)Linux内核

Android的核心系统是基于Linux 2.6内核提供服务的,主要依赖于它核心系统服务中的进程管理、应用权限及安全、网络协议栈、驱动模型等。Linux内核也同时充当硬件与软件之间的抽象层。

1.1.3Android应用程序分析

Android的API主要由几个模块组成,分别为一组核心的包和类、清单文件的XML元素及属性声明、各类意图(Intents)、资源文件的XML元素和属性声明及访问形式、可被应用程序请求的各类授权以及包含于系统中的授权执行。

Android的应用程序由以下四种主要类型组成:Activity、Service、BroadcastReceiver以及ContentProvider。

(1)Activity

Activity是Android中最常用的应用程序类型,一个Activity通常相当于一个单独的屏幕。在Activity中可以配备一些View,而View类负责各种界面中的元素实现,例如标签、编辑框、按钮等。一个Android应用程序中包含有一个或者多个Activity。这些Activity与应用程序中的屏幕以一对一的形式对接。

Intent的作用在于解决Android应用中各组件之间的通讯,是对将要执行的操作的抽象描述。Intent最常见的作用在于可实现多个Activity之间的跳转,其中包含的重要部分为Intent动作(Action)与动作对应的数据(Data)。

在这里对Activity中的View类做个简单介绍,Activity通过View来显示用户界面的各项元素。LinearLayout、TableLayout、AbsoluteLayout等都是View可以选用的布局设计方式,用户接口可在选择一种布局之后,通过View来显示。View元素是通过View控件组建,例如:按钮、列表、文本编辑框等,每个元素一般都包含有多个属性。

(2)Service

Service启动是通过startService(Intent service)实现的,而通过Context.bindService可对Service进行绑定。Service没有可见的用户界面,但可以在后台长时间运行。

(3)BroadcastReceiver

BroadcastReceiver通过英文理解可知它是“广播接收者”的意思,从组件本质来看它是一种全局的监听器,对系统全局的广播信息进行实时监听。在一般情况下,BroadcastReceiver没有用户接口,通常注册于AndroidManifest.xml文件中。

(4)ContentProvider

ContentProvider类因为实现了一组标准的方法接口,使得ContentProvider的各种数据能够被其他应用程序存储和读取。它是Android的数据存储抽象机制,对程序间数据通信与共享问题的解决提供了很大的作用。

1.2基于UDP协议的Socket通信

1.2.1socket通信机制

Socket(套接字)是网络应用程序的编程接口。每个套接字是通过一个半相关描述的形式进行表示,例如:协议、本地地址或者本地端口;而一个完整的套接字则使用一个相关描述,补充进远程地址和远程端口。每一个套接字都有唯一的套接字号,是通过本地的操作系统进行分配获取的。

Socket根据传输数据类型的不同,主要分成三种类型:

(1)流式Socket(SOCK_STREAM),这种类型是基于TCP协议实现的,两个通讯的应用程序首先要建立虚拟的连接,彼此提供可靠的、面向连接的通信流,从而保证了数据传输过程的有序性与准确性。

(2)数据报Socket(SOCK_DGRAM),该类型采用数据报协议UDP,是一种无连接的服务,传输的数据报文相互独立,无顺序且可靠性无法得到保证。

(3)原始Socket,该类型允许对底层协议(IP或ICMP)直接访问,功能相较前两者更为强大,但是使用较为不便,很多协议的开发基于该类型创造。

1.2.2UDP协议的工作原理

UDP协议是面向无连接的传输层协议,区别于在连接过程中需要服务器端侦听的TCP协议,它是一种“强制性”的网络连接。UDP数据报服务类型分为三种:一对一、一对多和无连接。它不保证数据在传输过程中是否能到达目的端、也不能够保证数据在传输的过程中是否有序进行,对于丢失的数据不进行重新传输。UDP协议的主要工作是负责将应用程序传递过来的数据分块交给网络层,确保能够接收到分组的信息。

虽然UDP协议无法像TCP协议那样保证数据传输的可靠性,但UDP具有自身的优越性,尤其在无线网络中对数据传输的要求,UDP协议使用范围更广。UDP相较于TCP,传输效率更胜一筹,而且很多应用程序并不要求传输的数据具有可靠性,例如视频通讯,需要实时的交互,并不要求数据的绝对正确与可靠性。

UDP每个端口是由一个唯一的编号进行标识,使用UDP端口号时,它提供给客户端发送消息的位置。当应用程序要向另一个终端发送消息时,UDP生成一个数据头,包括源端口,这些端口提供送达信息所需要的地址。UDP协议确保数据的安全是通过在报头中提供校验值的方式,在目标计算机中,数据包被传递到UDP协议程序并且送达目的地端口。

1.3数据库技术

当应用程序要对大量数据进行处理时,需要使用关系数据库对这些数据信息进行存储、管理以及查询。Android平台自身携带SQLite数据和相关的API,这对于开发人员实现数据库的相关操作提供了很大的便利。SQLite是完全独立的,不依靠于外部应用程序独立开发,并且它非常健壮,一天内可以处理100000多次web站点的点击率,甚者可以超达上述数字10倍负荷的处理量。SQLite是一个轻型的数据库,在一些简单的语句处理方面比当前业内流行的数据库处理性能更为快捷,对于内存有限制的Android移动设备而言,SQLite数据库更为匹配。

SQLite是一款开源的中小型嵌入式数据库,用途宽广。它为SQL92提供了大多数支持,例如:视图、支持多表与索引、触发器等。SQLite具有以下功能特性:支持ACID事务、对数据库大小的支持达到2TB、API简单快捷、可以在不同字节顺序的机器间自由共享数据库文件信息、不需要安装以及管理配置、源代码量大致13万行所占体积很小等。基于以上特性可知,SQLite数据库为开发人员在应用程序的开发过程中,提供了很大的便捷性。

下面结合系统分析与设计对本发明进一步说明。

2、系统功能目标

基于现有的业务流程和对目标系统的需求分析,要实现一个自组织的网络,主要要实现以下功能内容:实现基于Android的UDP Socket通信、能及时发现有新的节点加入移动网络并更新节点列表、有节点离开也能及时做出响应并告知该网络中的其他用户、能实现跨网段的通信等。

系统非功能性需求

(1)界面需求

在界面风格方面要求结构简单明了,布局简洁合理,操作简单流畅,有助于用户的快速上手使用。需要实现的界面有:一个列出当前移动网络中可到达的节点信息概要的界面,一个显示与某个节点进行消息发送与查收记录的聊天界面,一个对用户个人基本信息修改的界面。

(2)软硬件环境

移动手持设备,操作系统在Android 1.5及以上,要求支持IEEE 802.11协议。

(3)质量需求

质量需求是对应用软件应具备的质量属性的要求,具体内容见表3-1所示。

表3-1质量属性需求表

系统架构设计

架构设计部分主要表述的是系统具体功能部件的搭建过程,以及相互间的通信概况,是对编码成果的检验。本发明主要由UI表现层,基于UDP协议的套接字通信过程,SQLite数据库和Android操作系统四大部分组成。

Android操作系统:主要负责界面组件的API,数据发送API,SQLite数据库操作API等。

UDP Socket通信协议:满足同个WLAN环境中,同个网段或不同网段间用户的通信过程。通过Android提供的数据包发送的接口,接受发送并对数据包内容处理,达到节点间的互发现与通讯的功能。

数据库:数据库表的设计是采用SQLite数据库,通过Android自带的SQLite相关接口进行实现。

表现层:手机上供用户操作体验的图形化界面,用于显示节点列表和消息编辑与记录,运用到Android提供的相关类实现。

表现层设计

根据系统的功能设计与架构分析,将应用划分为四个层次,本发明主要对表现层的功能进行详细分析。

表现层主要基于应用的功能需求而设计出以下界面内容:

(1)节点列表

该界面用于显示当前局域网络中可进行通讯的网络节点列表,以ListView控件来显示所有的节点信息,每个ListItem包含的节点信息属性有:

IPAdress:用于显示网络中可到达节点的IP地址;

User ID:用户的ID,节点注册登录,作为自己在该网络中唯一标识自己的字符串或者数字,用户可根据自身的喜好更改ID名称;

getmessagesCountBuId:用于显示某个用户发来信息,而自身未查看接收的消息的数量统计。

通过点击列表中某个节点,可跳转到聊天界面,进行信息的编辑发送与接收查看。

(2)个人信息设置

该界面用于用户根据自身的主观意愿选择喜爱的头像以及昵称编辑,当用户个人信息设置成功后,在下次与网络中其他用户聊天通讯中,会显示在聊天界面当中。

(3)通信记录

该界面用于用户编辑消息和显示本机与指定终端间信息往来的详情记录,这些记录包含的字段内容有:消息内容、发送方与接收方的用户ID、发送或接收消息的具体时间。这些通信记录保存在SQLite数据库中,方便检索查看。

下面结合附图和系统实现方法对本发明进一步说明。

3、开发环境

3.1本发明主要介绍系统实现所需要的Android开发环境搭建与设计工具的选择。系统配置与开发软件需求如下:

操作系统:windows 7

开发环境:Eclipse 4.2

JDK 1.7

Android Development Tools

Android SDK

3.2UDP协议与组播实现

如图3提供的节点加入流程图所示:4.2.1UDP Socket通信前期准备工作

(1)初始化指令缓存

initCmdBuffer():

System.arraycopy(Constant.pkgHead,0,regBuffer,0,3);

//初始化用户注册指令缓存

System.arraycopy(Constant.pkgHead,0,msgSendBuffer,0,3);

//初始化信息发送指令缓存

(2)检测网络连接状况,获取本地IP地址

在Android开发中,获取本地IP地址的方法有两种,分别为通过wifi的方式和使用GPRS,二者在正常运行过程中,都要对用户的使用权限进行更改设定。本软件采用的是GPRS获取本地IP地址。

(3)启动socket连接

comBridge=new CommunicationBridge();

comBridge.start();

(4)注册广播接收器

regBroadcastReceiver();

(5)获得自身相关信息

getMyInfomation();

包含的参数类型有:int iconId、String nickname、int myId更新注册命令和通话命令的用户数据

System.arraycopy(ByteAndInt.int2ByteArray(myId),0,regBuffer,6,4);

System.arraycopy(ByteAndInt.int2ByteArray(iconId),0,regBuffer,10,4);//更新注册命令的用户数据

System.arraycopy(ByteAndInt.int2ByteArray(myId),0,talkCmdBuffer,6,4);

System.arraycopy(ByteAndInt.int2ByteArray(iconId),0,talkCmdBuffer,10,4);//更新通话命令的用户数据;

(6)向网络发送心跳包,并注册自己。

new UpdateMe().start();

在局域网中接收和发送数据主要采用socket进行实现,但是如果socket断开连接,那么对接收和发送数据将造成影响。Socket中通过定时向对方发送心跳包的形式,告知对方自己仍“在线”,保证网络链接的有效性。本软件中,设定心跳包发送时间间隔为10秒钟。

(7)检查用户列表是否有超时用户

new CheckUserOnline().start()。

如图4提供的节点离开流程图所示:当某个节点退出移动网络,它需要广播一个remove消息告知网络中其它节点,其它节点通过广播接收器(broadcastreceiver)收到该消息,会立即做出响应,将退出的节点从自身的节点列表中删除。本软件对用户是否在线检测时间上限设置为15秒,如果超过15秒未作出响应则从列表中清除该用户。

(8)通知有新用户加入或退出

sendPersonHasChangedBroadcast();

当一个新的节点加入移动网络时,它会向网络中广播一个HELLO类型的消息,来告诉当前网络中其它节点自己的加入。当其它节点收到该节点发送过来的消息时,会将其加入到自己的节点列表中,同时回送一个HELLO_ACK类型的消息,让新加入的节点知道当前网络中有哪些节点存在,并快速建立起自己的节点列表。

3.3协议分析与通讯实现

UDP是一种面向非连接,不可靠传输的通信协议,区别于TCP协议信息发送的准确性,UDP有其传输效率较高的优点,因此在无线网络中具有很大的用途。

服务端:open a socket(socket)——>name the socket(blind)——>send and receive package(sendto recvfrom)——>close socket(closesocket)

客户端:open a socket(socket)——>send and receive package(sendto recvfrom)——>close socket(closesocket)

在广播数据包之前,发送方和接收方都要创建一个Socket对象,并且指定DatagramPacket数据包用来存储要被发送的数据。通常在定义UDP Socket服务时,会对一个固定的端口进行监听。在收发数据的过程中,调用Socket对象的send方法发送数据包,使用receive()方法对其发送过来的数据包进行接收,同时receive()也具有阻塞监听的作用。

如图2提供的接收方和发送方操作步骤流程图所示:

1、接收方操作步骤:

(1)启动Socket连接

comBridge=new CommunicationBridge();

(2)创建一个multicastSocket对象,并设定监听端口

multicastSocket=new MulticastSocket(Constant.PORT);

multicastSocket.joinGroup(InetAddress.getByName(Constant.MULTICAST_IP));//加入到组播组

(3)创建一个byte数组进行接收

byte[]uId=new byte[4];//获得用户ID号

byte[]ipBytes=new byte[4];//获得请求方的ip地址

byte[]msgBytes=new byte[Constant.msgLength];//接收信息

(4)创建一个空的DatagramPackage对象

DatagramPacket rdp=new DatagramPacket(recvBuffer,recvBuffer.length);

(5)使用receive()方法对发送方所发送的数据进行接收,同时它也是阻塞的方法

multicastSocket.receive(dp);

(6)解析接收到的数据信息

person.personId=ByteAndInt.byteArray2Int(personIdBytes);

//接收方ID

person.personHeadIconId=ByteAndInt.byteArray2Int(iconIdBytes);

//发送方ID

person.personNickeName=(new String(nickeNameBytes)).trim();

//用户的昵称

person.ipAddress=

Constant.intToIp(ByteAndInt.byteArray2Int(personIpBytes));

//用户的IP地址

person.timeStamp=System.currentTimeMillis();

//接收信息的时间

(7)关闭Socket连接

multicastSocket.leaveGroup(InetAddress.getByName(Constant.MULTICAST_I P));//离开组播组

multicastSocket.close();

2、发送方操作步骤

(1)启动Socket连接

comBridge=new CommunicationBridge();

(2)创建一个multicastSocket对象,并设定监听端口

multicastSocket=new MulticastSocket(Constant.PORT);

multicastSocket.joinGroup(InetAddress.getByName(Constant.MULTICAST_IP));//加入到组播组

(3)创建一个InetAddress

InetAddress inetAddress=enumIpAddr.nextElement();

(4)将消息转为byte类型

byte[]msgBytes=msg.getBytes();

(5)创建一个DatagramPacket对象,并指定其要被发送到的网络中的目的地址以及端口号

DatagramPacketdp

=newDatagramPacket(msgSendBuffer,Constant.bufferSize,InetAddress.getByName(psn.ipAddress),Constant.PORT);

(6)调用multicastSocket对象的send方法发送数据

multicastSocket.send(dp);

(7)关闭Socket连接

multicastSocket.leaveGroup(InetAddress.getByName(Constant.MULTICAST_I P));//离开组播组

multicastSocket.close().

图3是本发明实施例提供的节点加入流程图。

图4是本发明实施例提供的节点离开流程图。

下面结合系统测试与性能分析对本发明进一步说明。

4.1应用程序的实现:

4.1.1用户操作:

由笔记本电脑或者带有WLAN热点功能的智能手机建立一个局域网,将测试手机通过WiFi连接加入指定的WLAN。之后打开应用软件,系统会检测到当前移动网络中存在的通信节点,当有新的节点加入或离开网络,系统会自动更新其节点列表。为了方便不同用户间能快速识别对方的身份信息,可在信息设置中选择头像和修改昵称。随后用户可向局域网中其他用户发送或接收消息,实现基于Android的局域网络通信的目的。

4.1.2用户界面:

首先选择三部带有WiFi功能的测试手机,连入同一个局域网,依次启动应用,

当有新的用户加入到当前局域网并启动软件,该用户能快速获取到当前网络中其它通讯节点的信息,并建立通讯节点列表,而网络中的其它用户检测到有新用户加入,会及时作出相应,更新自己的通信列表。

4.2性能测试与分析:

4.2.1距离测试:

在距离测试实验中,为了测量系统在不同的地域环境中连接到所指定的局域网并保持正常通信的极限距离,我们分别在室内、室外选取不同的测试场合。由一部智能手机开设热点建立局域网;另一部手机作为服务器端,负责接收发送方从不同距离位置发送过来的消息,验证连接的有效性;第三部手机作为客户端,是距离测试实验的主要对象,通过选取不同的距离位置发送消息给服务器端手机,检验是否能被接收,直到该节点从服务器端消失,测量由热点源到客户端手机的直线距离,作为在该地域环境中,数据传输所能达到极限距离的半径。实验测试的结果,详情如下所示:

无线访问接入点(AP):vivo x3v rev 1.22.2(based onAndroid),

服务器端(接收数据):魅族mx4based onAndroid 4.4.4,

客户端(发送数据):Sony S55tAndroid 4.4.2,

1、室内环境:

(1)学生宿舍:

有无障碍物:有(隔墙),

传输距离:隔着两间宿舍(三堵墙),约为15米,

测试过程:将AP与接收数据端手机放在同一宿舍,后操控客户端手机,依次从相隔第一间、第二间、第三间屋内发送数据到服务器端,检测数据的有效传达性。测量结果显示在第三间宿舍发送数据到服务器端手机,数据包已丢失,两个节点在各自的通讯列表中无法搜寻到对方,即有效传输距离约为15米。

有无障碍物:无(宿舍楼道),

传输距离:约56米,

测试过程:选择行人较少的时段,将AP与接收数据端手机放在楼道一侧,之后操控客户端手机,沿着射线方向逐渐拉开距离,直到两节点各自从软件中搜寻不到对方。通过测量服务器端与客户端相隔路程的瓷砖个数,以及每个瓷砖的长度,计算出有效传输的距离约为56米。

2、室外环境:

(1)北综排球场外围(测量距离已超出排球场的直线距离,改为选址排球场外的人行道测试)

有无障碍物:无,

传输距离:约96米,

测量过程:选择行人较少的时段和路段,将AP与接收数据端手机放在道路端点一侧,之后操控客户端手机,沿着直线逐渐拉开距离,直到两节点各自从软件中搜寻不到对方。因传输距离较远,通过测量步长与步数的方式,计算出由客户端到AP的有效传输距离约为96米。

有无障碍物:有(行人、车辆等),

传输距离:约62米,

测量过程:选择行人较多的时段,将AP与接收数据端手机放在道路端点一侧,之后操控客户端手机,穿插于人流中,逐渐同服务器端拉开直线距离,通过测量步长与步数的方式,得出有效传输距离约为62米。

(2)北区室内运动馆外围:

有无障碍物:无,

传输距离:约118米,

测试过程:与北综外围排球场有障碍物测试过程相同

有无障碍物:有,

传输距离:约73米,

测试过程:与北综外围排球场无障碍物测试过程相同,

(3)情人坡,

有无障碍物:有(树、陡坡),

传输距离:方圆40米内,覆盖范围为整个情人坡,

测试过程:将AP与接收数据端手机放在情人坡路口,之后操控客户端手机,穿插于树丛、陡坡、池塘和情人坡的外围边界向服务器端发送信息。测试结果显示,有效传输距离覆盖整个情人坡。

以上实验基于距离测试得到相应的数据结论,下面主要谈论自身在实验过程中遇到的问题以及对应的分析过程:

(1)离AP近的用户节点对局域网中其它节点通讯状况的改变响应时延更短,相较于同AP距离较远的客户端手机,服务器端能更快判别客户端是否已断开连接。

分析:该实验现象是受调制方式与码率因素的影响。希望有更快的传输速度,那么要有良好的信噪比进行支撑。离AP越近,信号强度越强,信噪比越高,那么传输的速度也就越快。相反AP越远,信号的强度减弱,信噪比变低,那么传输的速度也就越慢。

从背景噪声角度分析,信号干扰越大,信噪比越低,传输速度越慢。相反信号干扰越小,信噪比越高,传输速度越快。

(2)客户端手机随着离AP距离的增加,信号传输时断时续,达到一定的距离发现与服务器断开连接,停顿片刻之后等信号恢复正常,可沿更远的方向继续迈进,重复多次,直到信号完全消失。

分析:目前的智能手机都支持IEEE 802.11协议,随着无线局域网技术的不断发展,IEEE 802.11也不断延伸出诸多的子协议,例如,作为AP的vivo x3v支持IEEE 802.11a/b/g/n协议,服务器端魅族4支持IEEE 802.11a/b/g/n/ac协议。不同子协议载波的频率、传输速率、传输距离各不相同。随着客户端手机离AP距离越来越远,不同的子协议间能自动的进行转换,保证移动网络连接的有效性。信号时断时续的原因,是因为协议转变过程中存在时间延迟。

(3)在不同时段或选取不同设备(笔记本电脑或者智能手机)建立局域网,在实验过程中,时常出现系统闪退或者失联的现象。

分析:该现象的发生与网络带宽有很大的原因,尤其在上网高峰时段或者有多个节点连入当前局域网并占用大量的网络带宽,对系统的性能将造成很大的影响。

4.2.2响应时间测试:

响应时间测试是通过客户端与服务器端发送不同长度的数据包,记录接收时间与发送时间,二者的时间差即为当前长度数据传输过程中的系统响应时间。

由于实验的测试是基于实体智能机进行,数据由客户端发送给服务端,响应时间非常短,得以毫秒计算。而在手机设置中无法将时间精确到毫秒显示,使得无法确保接收方与发送方是以相同的时间节点进行实验测试。

在实验过程中,为了测试不同数据长度传输过程中的响应时间情况。在初步计划拟定中,预设测试由100B、1k、10k、100k、1M、10M六个层级数据包传输情况。但在实际实验过程中,发现数据包的大小设定为10k,相应的缓冲区buffersize也调整到相应的大小后,数据由客户端发送给服务端,服务端无法接收到相应的信息,数据包在传输过程中丢失。通过Google查明原因,得到的解释为:

一个包没有固定长度,以太网限制在46至1500字节,1500就是以太网的最大传输单元。通信长度,是由发送方自身决定,但实际发送情况受到需求和网络状况的影响。对于TCP而言,这个通信长度可设置大一些,但Socket内部默认的收发缓冲区大小为8K。对于UDP,一般控制通信长度在1024字节至10K。无论包有多大,IP层和数据链路层都会将发送的包进行分片传输,而局域网一般控制在1500字节左右,分片后的包将由不同的路由传输到接收方。因为UDP是不可靠传输,对其而言,倘若其中有一个分片丢失,那么接收方的IP层将把整个数据包丢弃,这就产生了丢包现象。综合以上因素,响应时间测试实验未能完成。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1