




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于蓝牙的手机广告发布系统姓名: xxx 学号: xxxxxx摘要:本文只要介绍了蓝牙无线通信技术和蓝牙设备之间通过obex协议实现信息交换(传输图片,视频等)的基本方法,并在j2me平台上开发了一个简易的手机广告发布系统。关键字:蓝牙技术;蓝牙协议栈;j2me;obex1. 引言蓝牙技术1是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。以蓝牙技术为依托,在室内或室外布置一系列称作蓝牙广播站的蓝牙设备,通过这些设备自动搜索覆盖范围内(目前多在100m以内)的蓝牙终端(手机、pda、pc等),而后询问用户是否愿意接收一个广告文件(图片、视频、文本文档等等多种多样的信息形式),经过允许后方可向用户发送数据信息。与传统的平面或视频广告媒体相比,蓝牙媒体具有先进而强大的技术背景和功能承载。通过蓝牙,将信息直接送达用户手机中,商家与消费者之间形成互动,拉近两者的空间距离,缩短了营销手段与购买行为的时间周期。本文设计了一种内嵌蓝牙模块的手机之间的广告发布系统。2. 背景介绍2.1. 蓝牙技术蓝牙技术是由爱立信、诺基亚、东芝、intel和ibm于1998年5月联合推出的。这一技术推出后迅速得到了包括摩托罗拉、西门子、3com、tdk等大公司在内的许多厂商的支持和采纳。到2000年5月,采用蓝牙技术的公司已经超过1900家,使得这种技术成为有史以来发展最快的通信技术。蓝牙技术是一种低成本、短距离的无线接入技术,是实现语音和数据无线传输的开放性标准。蓝牙技术的目标是提供一种通用的无线接口标准,用无线链路代替传统网络中的电缆连接,在蓝牙设备间实现方便灵活、安全快捷的数据和语言传输。蓝牙技术采用调频扩谱(frequency hopping spread spectrum)技术,在2.45ghzism频带上以1600 hop/s的速率进行跳频,采用低功率时分复用方式发射,可在10m范围内进行无线通信,如果增加发射功率,其通信距离可达100m。当发射频率带宽为1mhz时,其有效数据传输速度为721kbps。蓝牙技术采用快跳频方式,短分组技术和向前技术和前向纠错(fec)编码技术确保传输的可靠性。蓝牙技术既支持点对点的连接也支持点对多点的连接,若干个相互独立的蓝牙设备,以特定方式连成一个微微网,在一个微微网中一台设备可同时与七台从设备进行通信。根据现有规范,几个这样的微微网连接在一起可以建立一个结构非常灵活的分布式网络。不同的微微网采用的跳频序列有所不同,但在同一个微微网中,所有的设备都使用同一个跳频序列进行同步,且所有的蓝牙设备都是对等的,以同样的方式工作。当一个微微网建立时,只有一台设备是主设备,即提供同步时钟和跳频序列的设备,其他均为从设备。且在这个微微网存在期间,一直都保持这一状况。 2.2. 蓝牙技术的近期和长远目标长期以来,现代通信技术致力于远距离的宽带通信网和全球漫游式的无线通信,企图把全世界的每一个角落都纳入有线或无线的网络之中,但是近距离的数字通信却一直被忽略,直到上世纪末才提上了议事日程。蓝牙技术所要解决的问题是在10m范围内实现各种电子产品信息的无线传输,消除它们之间纵横交错的连接电缆。为此,它必须达到如下一些技术要求:完好的替代功能:蓝牙技术所用的无线通道必须要像有线电缆一样准确无误地发送或接收数据,而无线通道上信息的传播环境比有线通道受到的干扰多得多、传送环境复杂得多。信息安全功能:电波在空间传播时会出现散射现象,于是无线信道传送的保密程度将远低于有线信道,蓝牙信息的安全问题不能忽视。承载能力:同时连接多个设备,要有足够的传输速率,支持不同类型(如声音和数据)的信息发送或接收。超低功率:设备可用电池供电。致密性高:蓝牙芯片内部结构复杂但体积小。全球通用:使用户能在世界各地方便使用。蓝牙网络功能:蓝牙技术把计算机、家电、通信等领域中的电子产品使用无线方式连接,自然而然形成一个以使用者个人为中心的网络,称为个人区域网。 这个网络的性质有两条,就是可移动性和自动接入性。所谓 “可移动性”是指能随时随地联网或下网,进、入网的终端不受限制。所谓“自动接入”是指蓝牙设备所具备的入网方式不受接入点或服务器的制约,在一定的空间范围内和接入数量有规定的情况下,自动建立与其它蓝牙设备之间的联系。联系过程是自动完成的,不需要人为干预。蓝牙技术的实现有赖于硬件电路和软件程序的双重支撑。硬件电路是一种1cm见方的嵌入式微功率芯片,如此小的体积、功率便于它嵌入到普通电子产品中;控制软件的职责是搜索并联系其它也嵌入有蓝牙芯片的电子产品,联系过程是一场信息交换的过程。通过发送、接收无线电波实现信息交换,发送功率越大,传播的距离就越远。但它们并不成正比,通常 100mw的发射功率可传输100m。而1mw的发射功率应传输10m左右,不能按比例减到只有1m。传播距离与一般家居面积相差无几。为了实用方便起见,对蓝牙芯片的基本要求有:1) 在10m范围内实现一点对多点的通信,一个蓝牙芯片最多时可同时与7个相同芯片实现无线通信;2) 蓝牙数据传输速率有效值应达到每条信道721位/秒,是普通电话线的13倍左右,最高1m位/秒。3) 使用频段2.42.4835ghz,这一频段属工业和医疗的自由频段,无需申请无线电波使用许可证,方便在全世界推广使用;4) 要求成本低廉,价格与所取代的电缆线基本持平,例如批量生产的蓝牙芯片产品,成本尽量控制在5美元左右。近期蓝牙的主要目标是取代各种电缆连接,通过统一标准的无线链路网将数字设备连成一个密不可分的整体,方便灵活、低成本、低功耗,像移动通信那样传输语音,像因特网那样传输信息。长远蓝牙的主要目标是占领家用和商用的近距离数据传输市场。2.3. 蓝牙协议栈体系结构 蓝牙技术规范是由蓝牙特别兴趣小组(sig)制定的,其可分为核心(core)和协议子集(profile)两部分。核心部分规定了射频、基带、连接管理、服务发现、传输层以及不同通信协议之间的协调工作等部分。协议子集部分规定了不同蓝牙应用所需的协议和进程。蓝牙规范的协议采用分层结构。分别完成数据流过滤和传输、跳频、数据帧传输、连接建立和释放、链路控制、数据拆装、服务质量、协议复用和分用等功能。设计协议的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的兼容性以及各种应用之间的互通性,充分利用兼容蓝牙技术规范的软硬件系统。但是值得注意的是,所有高层协议都要使用蓝牙技术规范中的数据链路层和物理层。蓝牙协议栈中的协议根据其用途的不同可分为四层:核心协议层:baseband、lmp、l2cap、sdp;电缆替代协议层:rfcomm;电话控制协议层:tcs bin、at命令集:可采用的其他协议层:ppp、tcp/ip、obex、wap、vcard、vcal、wae。其中电缆替代协议层、电话控制协议层和可采用的其它协议层可归为应用专用(application specific)协议。在蓝牙协议栈中,应用专业协议可以加在rfcomm之上,也可以直接加在l2cap之上。除了上面的协议层外,在蓝牙协议栈中,还定义一个主机控制接口(hci)和音频接口。hci提供到基带控制器、链路管理器、访问硬件状态和控制寄存器的命令接口。它介于软硬件之间,一般以固件的形式出现。上层协议提供调用lmp中的命令,获取所需的信息。hci位于l2cap的下层,但hci也可以位于l2cap的上层。audio与基带直接相连,可以在一个或多个蓝牙设备之间传递数据。2.3.1. 核心协议图 1 l2cap功能和作用示意图1) 基带协议基带和链路管理协议确保在微微网中的蓝牙设备间建立物理射频链接。蓝牙的射频系统可提供两种物理链接方式:同步面向连接 (sco)和异步无连接 (acl),而且在同一射频上可实现多路数据传输。可使用各种用户模式在蓝牙设备间传语音,面向连接的语音分组只需经过基带传输。而不到达 l2cap层。语音模式在蓝牙系统中相对简单,只需开通语音连接,就可传送语音。 2) 链路管理协议 (lmp) lmp负责在蓝牙设备间实现链路连接和控制。通过链接的建立、交换、检测以及加密、协商基带数据包的大小等手段确保链路的安全。此外,lmp还控制着蓝牙射频设备的电源模式和工作周期,以及微微网中蓝牙设备间的连接状态 。 3) 逻辑链路控制和应用协议 (l2cap) l2cap在基带协议之上,处在数据链路层,可为上层协议提供面向链接和无链接的数据服务它与lmp平行工作,当数据不经过 lmp时。l2cap可为上层提供服务。l2cap允许上层协义传送和接收长度为64kb的l2cap数据包,并支持多路复用技术、包的分割与重组技术以及群提取技术。 l2cap和lmp共同实现 osi的数据链路层的功能。l2cap的功能和作用可用图 1来说明。用户和服务器分别表示了请求服务的发起者和接受者。应用级的用户必须既能发起请求又能接受请求,两个垂直层之间的接口利用低层的前缀来向高层提供服务,如 l2ca,两个同层之间的接口利用协议的前缀来提供服务,如 l2cap。 4) 服务发现协议(sdp) sdp是蓝牙协议栈中至关重要的部分,它是所有用户模式的基础。sdp可根据用户的需求发现相应的服务及提供这些服务的设备,同时可给出服务和设备的列表。sdp支持三种查询方式:按服务类型查询、按服务属性查询和服务浏览。2.3.2. 电缆替代协议(rfcomm)rfcomm是一种简单传输协议,位于l2cap层之上,它在蓝牙基带协议上仿真rs-232的控制和数据信号,为使用串行线传输机制的上层应用协议(如obex协议)提供支持。rfcomm可在两个蓝牙设备间同时支持60路链接。该协议是由sig在gsm ts07.10规范基础上开发而成的。2.3.3. 电话控制协议1) 二进制电话控制协议tcs binsig在itu-t q.931的基础上开发了一组面向比特流的协议tcs bin(telephony control protocol specification binary)。该协议定义了在蓝牙设备间建立语音和数据时传输所需的呼叫控制信号。tcs的主要功能有呼叫控制(call control)、设备群管理(group management)等。2) at命令集at-commandsat-commands是一套可在多用户模式下用于控制移动电话和调制解调的命令。它是由sig根据itu-tv.250建立和gsm ts07.70定义而来的。2.3.4. 可采用的其它协议1) 点对点协议 ppp ppp是由ietf规定的点对点协议(point-to-point protocol)。在蓝牙技术中,ppp运行于rfcomm之上,用于实现点到点的连接。2) tcp/ip协议tcp/ip由ietf制定,作为现在应用最广的协议族,tcp/ip协议栈被广泛地应用于因特网通信中。在蓝牙设备中使用这些协议是为了和与因特网相连接的设备进行通信。3) 无线应用协议(wap)wap是由wap论坛制定的一种工作在各种广域无线网上的无线协议规范,其目的是将因特网和电话业务引入数字蜂窝电话和其它无线终端上。选用wap,可以充分利用为无线应用环境(wae)开发的高层应用软件2。2.4. j2mej2me作为java技术的一个组成部分,它与j2se,j2ee并称,根据sun的定义:j2me是一种高度优化的java运行环境,主要针对消费类电子设备的,例如:蜂窝电话和可视电话、数字机顶盒、汽车导航系统等。j2me技术在1999年的javaonedevelopconference大会上正式推出,它将java语言与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序3。j2m e与 j2se和 j2ee 相比, j2me总体的运行环境和目标更加多样化,但其中每一种产品的用途却更为单一,而且资源限制也更加严格。为了在达到标准化和兼容性的同时尽量满足不同方面的需求,j2me的架构分为 con figuration, profile和 optional packages。它们的组合取舍形成了具体的运行环境。2.5. obex协议2.5.1. obex简介obex全称为object exchange,中文对象交换,所以称之为对象交换协议。它在此软件当中有着核心地位,文件传输和irmc同步都会使用到它。obex协议构建在irda架构的上层。obex协议通过简单的使用“put”和“get”命令实现在不同的设备、不同的平台之间方便、高效的交换信息。支持的设备广泛,例如pc,pda,电话,摄像头,自动答录机,计算器,数据采集器,手表等等。obex协议定义了一种柔性的概念objects。也即是对象。这些对象可以包括文件,诊断信息,电子商务卡片,银行的存款等等。objects在这里没有高级的技术含义,而是视你的应用而定。obex协议小到可作“命令和控制”功能,例如对电视机,录像机等的操作。大到可以做很复杂的操作,例如数据库的事务处理和同步。obex能够具有以下几个特点:1. 友好的应用可实现快速开发。2. 紧缩可用在资源有限的小型设备上。3. 跨平台。4. 柔性的数据支持。5. 方便的作为其他internet传输协议的上层协议。6. 可扩展性提供了对未来需求的扩充支持而不影响已存在的实现。例如可扩展安全,数据压缩等。7. 可测试可调试。2.5.2. obex对象模型. 关于headers对象模型回答了对象是如何在obex协议描述的。这个模型必须包括被传输的对象和对对象的描述。为了做到这点,obex定义了headers的概念。一个header反映了对象的一个方面,例如名字、长度、描述文字或者对象本身。例如,一个文件对象demo.txt会包含它的名字,一个类型标示为“text”,长度和文件本身。headers的构成headers简单地由和组成,简称为和。hi由一个字节组成,指出了header包含的内容以及它的格式。hv包含了一个或者多个字节,其结构由hi所决定。所有的header都是可选的,取决于设备的类型和事务的种类。你可以使用所有的header,或者一些,或者没有。id可以使header可解析以及与传输顺序无关,也可以使不支持的header被忽略掉。. 关于常用header的更详尽的解释1. namename是一个用来描述对象名称的header,由以null(0x00)结尾的unicode字符串组成。例如:demo.txt2. lengthlength描述了对象的大小,由4个字节组成。如果length事先知道,这个header应该被用到。这样可以让接受者迅速的知道需要分配多少空间,可使处理更为迅速。但这也不是必须的,有些情况下长度无法确认,但设备可以通过end-body header知道什么时候结束。3. timetime描述了对象的最后修改的时间。使用iso8601格式。本地时间格式:yyyymmddthhmmssutc时间格式:yyyymmddthhmmssz格式中的t可以方便的区分日期和时间。utc时间使用z作为标记。建议使用utc时间。4. body、end-of-bodybody header由hi、一个2byte长度的描述和整个的对象本身。end-of-body组成和body组成一样,但标识了这是对象的最后一部分。如果对象本来就很小,就直接使用end-of-body。. 关于请求(request)和回应(response)obex使用request和response作为最基本的操作。请求的每个request必然有一个response,否则可认为request失败。request由一个或多个的packet(包)组成,每个包的结构如下表1表格 1 request数据包结构byte 0byte 1,2byte 3 to n操作码(opcode)packet length(包长度)headers或请求信息由于每个request可能有多个packet,opcode的最高位称为final bit。如果被设置为1,那么说明这是request的最后一个packet。例如:当用put操作发送一个大文件时,会有几个packet作为一个request。那么只有最后一个packet的finalbit设置为1。response也由一个或多个packet组成,每个包的结构如下表表格 2 response数据包结构byte 0byte 1,2byte 3 to nresponse code(返回值)response length(回应长度)responsedata回应的数据同样的responsecode的最高位也叫做finalbit。responsedata可能包含对象和header,或者其它信息。下表列出了了常见的opcode和responsecode。表格 3 opcodeopcode(w/high bit set)定义意义0x80 *connect连接0x81 *disconnect断开连接0x02(0x82)put发送一个对象0x03(0x83)get取得一个对象0x04(0x84)reserved保留的0x85 *setpath设置路径0xff *abort取消当前的操作0x06到0x0freserved作为扩展保留0x10到0x1fuser definable用户自定义的*总是设置finalbit 表格 4 responsecoderesponsecode定义0x10(0x90)continue(继续)0x20(0xa0)ok,success0x40(0xc0)bad request(服务端不明白request)0x41(0xc1)unauthorized(未授权的)0x43(0xc3)fobidden(禁止服务器明白request,但拒绝)0x44(0xc4)not found(未找到)2.6. 拓扑结构蓝牙支持点对点和一点对多点的通信。蓝牙最基本的网络组成是微微网。而微微网实际上是一种个人区域网。这是一种以个人区域(即办公室区域和家庭区域)为应用环境的网络建构。这里需要指出的是微微网并不能够代替局域网,它只是用来代替或简化个人区域的电缆连接。微微网由主设备单元和从设备单元两种设备构成。主设备单元负责提供时钟同步信号和跳频序列,而从设备单元一般是受控同步的设备单元,并接受主设备单元的控制。在同一微微网中,所有设备单元均采用同一跳频序列。每个从设备单元的起始频率和占用信道由主设备单元控制。一个微微网中,一般只有一个主设备单元,而从设备单元目前最多可以有7个。当主设备单元为一个,从设备单元也是一个的时候,这种操作方式是单从方式,如图 2所示。图 2单从方式网络拓扑当主设备单元是一个,从设备单元是多个的时候,这种操作方式是多从方式,如图3所示例如,办公室的 pc可以是一个主设备单元,而无线键盘、无线鼠标和无线打印机可以充当从设备单元的角色。图 3单从方式网络拓扑不同的微微网之间可以互相连接。蓝牙规范指出,几个相互独立并不同步的、以特定方式连接起来的微微网构成了分布式网络,又称作微微互连网,如图3所示。相邻或相近的不同的微微网采用不同的跳频序列以避免干扰。在图4中,一个微微网中的主设备单元同时也可以做为另一个微微网中的从设备单元,我们把这种设备单元叫做复合设备单元4。图 4微微网互连组成分布式网络3. 总体分析与设计一个蓝牙的应用包含一个服务端和一个客户端。商家的广告平台为服务器端,客户的手机为客户端5。服务器端向客户端发送广告的图片,视频等。服务器端:一个为客户端提供服务的服务器。它对客户端进行注册,对它们进行有效广播。然后等待连接,收到有请求时接受他们并为它们提供服务。最后,当不再需要服务时,应用程序会将服务器端和客户端的连接移除。服务器端的工作流程如下(具体系统截图见下图5,6):1. 启动2. 侦听客户端服务请求,若有客户请求连接,建立连接3. 列出当前共享文件列表4. 侦听客户端选择要接收的文件5. 根据客户的选择发送相应的文件数据6. 完成当前文件数据发送后,侦听下一个文件数据的请求7. 当前用户的文件数据发送后,返回到2图 5服务器端发送数据文件图 6 服务器端和客户端进行连接核心代码:1) 服务器端和客户端建立连接 private void connect() throws ioexception string url = irdaobex:/discover.0210;ias=imageexchange;/*通过指定的url和客户端建立连接*/ session = (clientsession)connector.open(url);/*建立连接后对方返回的头部信息*/ headerset response = session.connect(null); int responsecode = response.getresponsecode(); /*正常情况返回*/*若出现异常,直接向上层抛出异常*/ if (responsecode != responsecodes.obex_http_ok) throw new ioexception(); 2) 释放连接private void closeall() if (baos != null) try /*释放传输的文件数据*/ baos.close(); catch (ioexception ioe) baos = null; /*释放obex流outputstream*/ if (outputstream != null) try outputstream.close(); catch (ioexception ioe) outputstream = null; /*释放operation*/ if (operation != null) try operation.close(); catch (ioexception ioe) operation = null; /*释放服务器端和客户端之间的连接*/ if (session != null) try session.disconnect(null); catch (ioexception ioe) try session.close(); catch (ioexception ioe) session = null; 3) 加载向客户端传输文件数据/* load image data to array */ private void loadimagedata(string imagename) throws ioexception /*读取本地文件夹下指定的文件*/ imagesource = getclass().getresourceasstream(imagename); /* 建立buff数组,buff大小设置为1024*/ byte buff = new byte1024;/*建立byte型数组缓冲区*/ baos = new bytearrayoutputstream(1024); /*批量将imagesource的数据读取到buff中*/ while (true) / check stop signal if (stop) throw new ioexception(); int length = imagesource.read(buff); if (length = -1) break; /*将buff中的数据写入缓冲区*/ baos.write(buff, 0, length); /*将缓冲区存入一个更大的byte数组类型变量imagedata中*/ imagedata = baos.tobytearray(); 4) 上传要传输的文件/* uploads image to receiver */ private void uploadimage(string imagename) throws ioexception int position = 0; headerset headers = session.createheaderset();/*将要传输的文件名写入obex的头部*/ headers.setheader(headerset.name, imagename);/*将要传输文件大小写入obex的头部*/ headers.setheader(headerset.length, new long(imagedata.length); operation = session.put(headers); outputstream = operation.openoutputstream();/*批量将imagedata中的文件数据发送给客户端*/ while (position != imagedata.length) outputstream outputstream = this.outputstream; int sendlength = (imagedata.length - position) 256) ? 256 : (imagedata.length - position); if (outputstream = null) throw new ioexception(); outputstream.write(imagedata, position, sendlength); position += sendlength; /*发送完后,关闭outputstream*/ outputstream.close();/*获取operation*/ int code = operation.getresponsecode();/*若发送文件数据过程中发生错误,直接抛出异常*/ if (code != responsecodes.obex_http_ok) throw new ioexception(); 客户端:一个客户对远端服务进行消费。首先它要发现所有附近的设备,然后对每一个发现的设备搜索它感兴趣的服务。客户端的工作流程如下(具体系统截图见下图7,8,9):1. 启动2. 搜索服务服务端设备3. 若没有可用的设备,那么就终止4. 若有可用的设备,就开始搜索服务器提供的服务5. 若没有可用的服务,那么就终止6. 若有可用的服务,就获得服务列表7. 选择相应服务8. 启动相应线程侦听客户动作,若客户选择此次操作结束,则返回到69. 获取客户的操作,将操作指令发送给服务器端图 7 客户端接收数据文件图 8 客户端与服务器建立连接,准备接收数据图 9 客户端下载并显示服务器发送的数据文件核心代码:1) 客户端和服务器端建立连接public void run() try / synchronized to prevent loss of opened session synchronized (this) /*通过指定的url和服务器端建立连接*/ string url = irdaobex:/localhost.0010;ias=imageexchange; session = (sessionnotifier)connector.open(url); current_state = opened; while (current_state != closed) session.acceptandopen(handler); preventoverloading(); catch (ioexception ioe) /*若连接过程中发生中断,抛出异常*/ synchronized (this) if (current_state != closed) ioe.printstacktrace(); synchronized (this) if (current_state != closed) current_state = closed; /*关闭连接*/ closeall(true);2) 接收文件 private int imagereceive(operation operation) headerset headers = null; string imagename = null; int imagelength = 0; int responsecode; try /*开始接收数据文件*/ startsynchreceiving(operation); / download information about image/*读取发送数据的头部*/ headers = operation.getreceivedheaders();/*从头部读取传输的文件名*/ imagename = (string)headers.getheader(headerset.name);/*从头部读取传输的文件长度*/ imagelength = (int)(long)headers.getheader(headerset.length).longvalue(); /*界面向手机用户询问是否允许接收文件*/ if (gui.askpermission(imagename, imagelength) /* 下载并显示数据文件*/ gui.showimage(downloadimage(imagelength); responsecode = responsecodes.obex_http_ok; else /*若用户不接收文件,则此次传输文件被禁止*/ responsecode = responsecodes.obex_http_forbidden; catch (ioexception ioe) /*传输中发送错误,进行错误处理*/ if (current_state = stoped) gui.showwaiting(); closeall(false); responsecode = responsecodes.obex_http_reset; else if (current_state = connected) gui.cannotconnectmessage(); closeall(false); responsecode = responsecodes.obex_http_internal_error; else if (current_state = started) gui.stopmessage(); gui.showwaiting(); closeall(false); responsecode = responsecodes.obex_http_internal_error; else / closed, opened ?, none ? synchronized (this) current_state = closed; closeall(true); responsecode = responsecodes.obex_http_internal_error; /*停止接收数据文件*/ stopsynchreceiving(); return responsecode;3) 下载数据文件: /* download image. */ private byte downloadimage(int imagelength) throws ioexception byte imagedata = new byteimagelength; int position = 0; int length = 0;/*检测当前服务器端和客户端的状态,若为断开连接,则直接在此抛出异常*/ checkstopsignal(); /*显示发送传输数据的进度条*/gui.showprogress(imagelength); synchronized (this) current_state = started; inputstream = operation.openinputstream(); while (position imagelength) inputstream inputstream = this.inputstream; if (inputstream = null) throw new ioexception(); checkstopsignal();/*批量传输数据*/ if (position (imagelength - 256) length = inputstream.read(imagedata, position, 256); else length = inputstream.read(imagedata, position, imagelength - position); if (length 0) throw new ioexception(); position += length; gui.updateprogress(position); synchronized (this) current_state = closed; closeall(true); return imagedata; 4. 结论obex 协议是一种简单、高效的高层应用协议。随着手机和各种便携式产品得到广泛的应用,可以通过 obex 协议的文件传输,可实现多种设备,如pc 机、pda、笔记本、移动电话的文件共享,应用范围相当广泛。本文通过深入了解obex 协议,并在j2me开发平台上的开发实践,给出了基于 obex 协议的文件传输的实现方法。以上系统在j2me的模拟器上调式通过,但还没有在多个真实的移动电话的环境中(例如:nokia,motorola,sony ericsson等)进行测试,下一步将进行多终端情况下的测试,以此来了解系统的实用性。5. 参考文献:1 金纯,许光辰,孙睿蓝牙技术北京:电子工业出版社,2002.2 邹俊,马家志,胡明.蓝牙协议的体系结构及其应用j.移动通信,2002(4):40-43.3 廖永刚, 余冬梅, 张秋余. j2me架构与安全机制的研究j.计算机工程与设计, 2006, 27 (4): 575 - 577.4 井雅,徐晓东,吕志虎.蓝牙协议模型及应用j.通信技术.2001(5):34-36,50.5 王昆.基于obex的文件传输在手机平台上的应用j.计算机工程与设计.2006,27(24):48034805. 6. 附录obeximagesend.java, obeximagereceiver.java为本系统中的核心代码,承担了服务器端和客户端的功能,在此列出:obeximagesender.javapackage
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年签订的合同无效应该如何处理
- 修路工程安全合同样本
- 公司 信托 贷款合同标准文本
- 公司与公司提成合同样本
- 代理劳务派遣合同样本
- 共有购房合同标准文本
- 买卖合同解除合同样本
- 企业拍摄宣传合同样本
- 2025年高考语文复习练【现代文阅读I题】及答案解析
- 2025中英合同金额数字的表达
- 介绍梅西的英语演讲稿
- 康复治疗师考试知识点汇总
- 2023年北京市农林科学院事业单位招聘(共500题含答案解析)笔试历年难、易错考点试题含答案附详解
- 尿崩症诊疗规范内科学诊疗规范诊疗指南2023版
- 3D打印实训指导书
- 除草机器人简介
- 当代文学第一章1949-1966年的文学思潮
- a320飞机空调系统工作原理与使用维护分析
- 施工机具进场检查验收记录
- 《液压与气动技术项目教程》高职配套教学课件
- 2022年七步洗手法操作考核评分标准
评论
0/150
提交评论