• 488.00 KB
  • 2022-04-22 11:38:58 发布

Android的Ftp文件传输毕业论文(1).doc

  • 51页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业设计(论文)题目基于Android的FTP文件传输姓名学号专业班级所在学院指导教师(职称)45 基于Android的FTP文件传输【摘要】本课题先讨论了当前手机管理类应用程序的背景、现状和发展趋势,并分析了手机管理类应用程序现有的功能。本课题根据用户的需求,基于Android技术,利用ftp远程共享原理来实现无线手机助手的设计。本课题研究的无线手机助手采用的是基于C/S架构的MVC系统,基于ftp远程文件共享的Android技术,和Eclipse应用开发工具,利用网络代理作为中转服务器,利用Android2.2作为系统平台进行开发,对无线手机助手业务进行分析、设计,实现了登陆验证、浏览文件、文件上传、下载、删除等功能,以期达到快捷管理手机文件的目的。【关键词】手机管理,手机助手,文件管理,Android,Ftp45 浙江大学城市学院毕业论文AbstractWirelessMobileAssistantBasedOnAndroid【Abstract】Thissubjectdiscussedthebackground,statusandtrendsofphonemanagementapplicationsonthefirst.Andanalyzestheexistingfunctionalityofthephonemanagementapplications.ThissubjectbasedontheneedsofusersandbasedonAndroidtechnologytousethetheftpremotesharedprincipletoachievethedesignofwirelesshandsetsassistant.WirelessmobileassistantfortheresearchisbasedonC/SstructureoftheMVCsystem,ftpremotefilesharing,basedonAndroidtechnologyandtheEclipseapplicationdevelopmenttools,usingthenetworkproxyasarelayserver,usingAndroid2.2asasystemplatformdeveloped.Throughanalysisinganddesigningthewirelessmobileassistant,thissubjectachievesloginauthentication,browsefiles,fileupload,download,deleteandotherfunctionsinordertoachievethepurposeofthecomfortablymanagephonefiles.【KeyWords】MobileManagement,MobileAssistant,FileManagement,Android,Ftp45 浙江大学城市学院毕业论文目录目录第1章绪论21.1应用的开发背景11.2本课题研究内容1第2章相关理论及关键技术22.1Android特性简介22.2Android系统架构32.2.1关键应用程序32.2.2应用程序框架32.2.3C/C++函数库42.2.4Java程序运行环境42.2.5Linux内核42.3Android应用程序框架42.3.1Activity52.3.2IntentReceiver52.3.3Service52.3.4ContentProvider5第3章需求分析63.1概述63.2功能需求63.2.1设置界面63.2.2控制界面73.2.3说明界面73.3性能需求73.3.1手机系统要求73.3.2灵活性73.3.3时间特性的要求83.3.4软件特性要求8第4章总体设计94.1系统总体结构94.2服务器系统解决方案9第5章详细设计115.1代理协议拟定1145 浙江大学城市学院毕业论文目录5.1.1DATASOCKETS115.1.2DISAMBIGUATINGDEVICESANDSESSIONS115.1.3AUTHENTICATION125.1.4API125.2关键代码实现155.2.1代理连接155.2.2会话线程175.2.3TCP连接监听18第6章系统实现206.1Server端模块的设计206.2Android设备端模块的设计21第7章系统测试247.1Android手机系统测试之打断事件247.2测试中发现的问题及修复257.3测试结果257.3.1开启服务257.3.2客户端访问ftp地址257.3.3登陆验证26结论27参考文献28附录29附录A文件传输协议简介29附录B应用程序界面代码30致谢4145 浙江大学城市学院毕业论文图目录图目录图2.2Android的架构图3图3.2设置界面用例图7图4.1系统总体结构图9图4.2服务器系统原理图10图5.2程序运行效果图19图7.3.1开启服务logcat图25图7.3.2客户端访问ftp地址logcat图25图7.3.3登陆验证logcat图2645 浙江大学城市学院毕业论文第1章绪论第1章绪论1.1应用的开发背景2007年11月由Google牵头有30多家移动技术和无线应用领域领先企业组成的开发手机联盟(OpenHandsetAlliance)发布了其智能手机平台Android。Android是一个真正意义上的开放性移动设备综合平台,包括操作系统、用户界面、中间件和应用程序,拥有移动电话工作所需的全部软件,同时其开放性保证该平台不存在任何阻碍移动产业创新的专有权障碍[1]。随着Android的迅猛发展,国内各种优秀应用也相继诞生,豌豆荚系列产品是国内最早的手机管理类应用。豌豆荚是一款基于Android手机管理软件,具有备份恢复重要资料、通讯录资料管理、应用程序管理,音乐下载、视频下载与管理等功能。在文件管理方面,最近上市的一款应用软件文件大师。是一款功能强大的文件管理软件。文件大师支持对文件的全部常用操作,如拷贝,删除,粘贴等。采用了特别优化过的文件/目录复制算法,使得其在大量文件复制的时候比其他文件管理类工具速度更快。1.2本课题研究内容在本课题中,主要研究在手机上建设FTP服务器,实现任意客户端可以登录FTP服务器上传下载文件。支持浏览器可视化浏览手机资源列表下载手机资源文件。通过计算机资源管理器或我的电脑管理手机:添加、删除、编辑等操作,全方位管理手机文件,实现无需数据线即可管理手机的功能。45 浙江大学城市学院毕业论文致谢第2章相关理论及关键技术2.1Android特性简介Dalvik虚拟机:Android采用的Java虚拟机是自主开发的代号为Dalvik的虚拟机技术,在保证API方面兼容的同时Dalvik针对移动手机进行了大幅优化,占用资源更小,运行效率更高[2]。内嵌浏览器:基于开源的浏览器网页排版引擎WebKit。优化的图形:强大的自定义二维图形库。基于OpenGLES1.0标准的3D图形功能,在移动3D开发中有着至关重要的地位。SQLite数据库:SQLitet提供结构化的数据存储。它是一款轻型免费的且开源的数据库,它的设计目标是嵌入式的,它占用的资源非常低、需要的内存空间少、处理速度比较快和支持事务处理功能等。多媒体支持:支持各种通用的音视频和静态图像格式,如MP3、JPG、PNG等。OpenCore是Android多媒体框架的核心,所有Android平台的音视频采集,播放的操作都是通过它来实现的。通过OpenCore,程序员可以方便快速的开发出想要的多媒体应用程序。GSM技术:(依赖硬件)GlobalSystemforMobileCommunications,全球移动通讯系统,俗称“全球通”,是第二代移动通信技术,其开发El的是让伞球各地可以共同使用一个移动电话网络标准,让用户使_一部手机就能行遍全球。蓝牙,EDGE,3G,andWiFi是一种短距离的无线连接技术,在短距离内可以实现话音和数据的无线传输。EDGE(EnhaIlcedDataRateforGSMEvolution),是增强型数据速率GSM演进技术[3]。Camera,GPS,compass,andaccelerometer:(依赖硬件)GPS(GlobalPositioningSystem)全球定位系统。它是一个由覆盖全球的24颗1J星组成的卫星系统。Compass是个开放源代码的JAVA搜索引擎框架[4]45 浙江大学城市学院毕业论文致谢。强大的开发环境:包括一个设备模拟器,调试工具,内存和性能检测,以及EclipseIDE的开发插件。Eclipse是个集成开发环境。2.2Android系统架构Android的架构是Linux内核、C/C++函数库、Dalvik虚拟机、应用框架以及关键应用程序构成的,通过编译基于框架的应用程序可以降低开发负荷。应用软件原则上是在DalvikVM上运行的。Android的架构图如下图2.2所示:图2.2Android的架构图[5]2.2.1关键应用程序Android平台内包含一些关键应用程序,如邮件收发客户端程序、短信收发程序、日历和网页浏览器等,开发者可以在其平台上开发更多有特色的应用程序。开发语言是Java。2.2.2应用程序框架Android应用程序的开发基于框架和组件。Android本身已在其框架中提高了许多的组件供应用程序调用,当然开发者也开放新的组件,并将组件放入应用程序框架中,以供自己和其它应用程序调用。45 浙江大学城市学院毕业论文致谢2.2.3C/C++函数库Android应用程序框架之下是一套C/C++函数库,它们服务于Android应用程序组件,其功能通过组件间接提供给开发者。这些函数库包括:标准C函数库、媒体功能库、浏览器引擎、2D和3D图形库、基于WEB应用的的安全协议SSL、用于点阵和矢量字体渲染的FreeType以及SQLite引擎等[6]。2.2.4Java程序运行环境Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,它们有效地优化了Java程序的运行过程。所有的Android应用都运行在它自己的进程里,该进程是一个Dalvik虚拟机的实例,Dalvik被设计成能在一台设备上高效的运行多个虚拟机实例。Dalvik虚拟机的可执行文件被封装成Dalvik可执行格式(.dex)。这是被优化过的最小内存依赖的格式[7]。Java编译器(dx工具)将注册了的和运行时用到的类编译成.dex格式。Dalvik虚拟机依赖于底层Linux内核提供的功能,如线程机制,和内存管理机制等。2.2.5Linux内核Android系统平台是基于优化了的Linux内核,是其系统平台的核心[8]。它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机软硬件的连接层,提供了一个屏蔽层用于屏蔽硬件和上层软件。2.3Android应用程序框架对于一个Android应用程序来说,是由Activity、IntentReceiver、Service、ContentProvider四部分组成,但并不是每一个Android应用程序都必须由这四部分组成[9]。在应用程序中使用时,需要在配置文件AndroidMainfest.xml中进行配置。这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等[10]。45 浙江大学城市学院毕业论文致谢2.3.1ActivityActivity是构成应用程序中最重要的构造块,在Android应用程序中,几乎都是通过Activity来与用户进行交互[11],所以Activity主要负责的就是创建与用户进行交互的显示窗口,你可以在这些窗口里通过调用setContentView(View)方法来显示你自己的用户界面。2.3.2IntentReceiverIntentReceivert是用于对外部事件的响应,当外部事件发生时,会使用NotificationManager通知用户[12]。当一个IntentReceiver被触发时,系统会在需要的时候启动对应的应用程序。如在本系统中,当用户正在其它界面进行操作时,有好友发送消息过来,就会以通知的形式发送到当前界面的正上方来通知用户。各种应用还可以通过使用Context.broadcastIntent()将它们的IntentReceiver广播给其它的应用程序,实现应用之间的通讯[13]。2.3.3ServiceService是提供连续信息的应用程序。它是运行于应用程序后台的服务,在用户进行其它活动的时候,这个服务将一直运行在基于Android平台的即时通讯系统的研究与实现后台直到用户停止该服务或服务运行结束。本系统客户端扩展功能的阅读器就是采用Service来进行设计和开发的,使用户可以边聊天边看书。2.3.4ContentProviderContentProvider应用程序能够将它们的数据保存到文件、SQL数据库和其它的存储设备中。当应用程序需要使用存储设备中的数据时,可以使用ContentProvider来完成。使用ContentProvider能够灵活的替换底层使用的存储设备,使开发者可以专著于应用逻辑的开发,不用考虑底层存储设备的细节,从而使应用系统具有良好的数据[14]。45 浙江大学城市学院毕业论文致谢第3章需求分析3.1概述随着手机功能不断增强,手机管理类工具软件已成为智能手机重要软件之一,开发一款符合广大用户需求的手机文件管理类应用有很好的市场前景和意义。本课题的目标是开发一款基于Android平台符合用户使用需求的手机文件管理助手。实现任意客户端可以登录手机FTP服务器上传下载文件。支持浏览器可视化浏览手机资源列表下载手机资源文件。通过计算机资源管理器或我的电脑管理手机:添加、删除、编辑等操作,全方位管理手机文件,实现无需数据线即可管理手机的功能。3.2功能需求作为Android平台上开发的应用软件,它具有与用户交互的界面,界面简洁美观易于操作。因此,对手机阅读器的功能规定可以从手机阅读器的界面来划分。手机助手的用户操作界面分为一下三部分:设置界面,控制界面,说明界面。3.2.1设置界面用户设置ftp服务器的账号和密码,端口号默认为2121,手机文件路径默认为/sdcard。设置界面用例图如下图3.2所示:45 浙江大学城市学院毕业论文致谢图3.2设置界面用例图3.2.2控制界面用户触摸开关按钮控制服务器的开启与关闭,只有当手机连接到wifi网络时才能开启该共享服务功能。当服务开启时,状态栏显示“无线手机助手接受ftp连接”。程序自动获取手机ip地址,控制界面提示“在‘我的电脑’里输入ftp://xxx”用户输入ftp地址即可远程操作手机中的文件。3.2.3说明界面为用户提供本应用的使用说明以及注意事项。3.3性能需求3.3.1手机系统要求Android系统2.2版本以上,对以后继续进行升级开发有可延续性。3.3.2灵活性软件基于Android操作系统,是基于组件的开发方式。45 浙江大学城市学院毕业论文致谢3.3.3时间特性的要求软件的速度要在用户可接受的范围能扩展需求。3.3.4软件特性要求软件运行速度要在用户可接受的范围之内,对电量等消耗要在用户可接受范围之内。保证在有wifi热点的区域使用,手机具备sd卡。45 浙江大学城市学院毕业论文致谢第4章总体设计4.1系统总体结构系统的总体设计思路是在Android手机上部署一个ftp服务器,负责提供服务并与pc客户端通信。pc作为管理手机资源的客户端,通过“我的电脑”或“资源管理器”进行文件操作。这实际上是一个C/S结构的系统,Android手机作为服务器,pc作为客户端。系统总体结构图如下图4.1所示:图4.1系统总体结构图在该系统中,网关连接了内部网络和智能外部网络,所有内部的设备与该网关相连。用户携带Android智能手机进入空间后,手机端连入网络,动态获取一个IP地址,运行ftp服务。PC访问ftp地址与服务器进行交互。Android手机与PC之间通过Socket进行通信[15]。4.2服务器系统解决方案45 浙江大学城市学院毕业论文致谢由于Android设备不能够接受入站连接,但它可以自由创建出站连接。因此Android设备上建立永久保持一个TCP连接到代理服务器。我们称之为“命令连接”。在本课题中,利用代理服务系统作为Pc和Android手机的中介信使,解决了Android手机的入站连接限制。当FTP客户端希望通过代理连接,它启动一个正常的FTP连接到代理服务器。代理通知本应用程序有一个即将到来的FTP会话等待被建立。本应用程序建立另一个TCP连接到代理(除了现有的控制连接),这个连接将被用于专门从FTP客户端发送和接收数据。服务器系统原理图如下图4.2所示:图4.2服务器系统原理图45 浙江大学城市学院毕业论文致谢第5章详细设计5.1代理协议拟定这整个代理系统的存在是为了解决入站连接限制。移动电话服务供应商阻止入站TCP连接,解决方法是在互联网上创建一个代理服务。Android设备是不能够接受入站连接,但它可以自由创建出站连接。因此Android设备上建立永久保持一个TCP连接到代理服务器。我们称之为“命令连接。”只要本应用程序运行着这个连接就存在,除非用户明确禁用它。当FTP客户端希望通过代理连接,它启动一个正常的FTP连接到代理服务器。代理通知本应用程序有一个即将到来的FTP会话等待被建立。本应用程序建立另一个TCP连接到代理(除了现有的控制连接),这个连接将被用于专门从FTP客户端发送和接收数据。重要的一点词汇:“命令”连接,是本应用程序和代理服务器之间的TCP连接。此连接使用新的协议,如下所示。“控制”连接,是FTP客户端和本应用程序之间的普通的FTP连接。使用普通的FTP协议,其中客户端发送的东西像USER,LIST,RETR,服务器响应“200OK”,“503Forbidden”等。5.1.1DATASOCKETSFTP协议的设计决定了新的TCP连接,独立于控制连接,它在每次有一个目录列表或文件传输时被创建。当它要执行动作时,需要跟客户端有一个新的datasocket(新的TCP连接)本应用程序创建另一个TCP连接到代理。5.1.2DISAMBIGUATINGDEVICESANDSESSIONS45 浙江大学城市学院毕业论文致谢由于代理服务器上运行在一个单一的IP和端口,提供多个设备和用户使用,因此它需要一些匹配传入连接的方式。例如,在PASV模式文件传输,本应用程序和客户端都要创建入站连接到代理服务器。在有许多客户端在同一时间被创建连接的情况下,代理使用的某种被称为“前缀”匹配这两个连接。前缀是6个字符的字母数字代码,唯一标识一个设备上运行本应用程序。它由代理服务器创建一个控制连接时分配,然后给本应用程序。5.1.3AUTHENTICATION设备的安全识别是通过分配一个唯一的“secret”到每个设备运行本应用程序。此secret被分配的第一次设备连接到代理服务器,并在设备上保持不变。这并不是很安全,但很合适。这个系统不能很好的对抗ANDROID_ID欺骗。这是不幸的,但足够好。5.1.4API请求和响应都是JSON的数据形式。所有的请求都有一个顶层的字符串为“action”的请求类型。例如,请求创建一个帐户为如下形式:{"action":"create_account""android_id:"1234567890"}响应是一个JSON对象做为请求的响应。作为一个惯例,如果在处理请求时发生错误,响应对象将包含顶级的字符串名为“errorCode”和“errorString”来识别错误。该errorCode是一个唯一的数字来表示错误,Errorstring是可读的错误描述。例如,如果不能创建帐户,下面的语句可以作为一个响应返回给上面的创建账户请求:{"errorCode":10"errorString":"AnaccountalreadyexistsforthatANDROID_ID"}如果操作成功{45 浙江大学城市学院毕业论文致谢"secret":"abcdefghijklmnopqrstuvwxyz0123456789"}成功的请求可能会导致一个响应是空的对象,如果没有错误报告和请求不要求返回任何值。这将是空的JSON对象,“{}”。例如,要求与行动“NOOP”会提示一个空的响应。在本应用程序已经建立TCP连接到代理以后本应用程序必须发送一下信息:-create_account-authenticate本应用程序到代理服务器的请求列表:Action:create_accountPurpose:本应用程序第一次运行时只调用一次。导致一个帐户被创建并创建一个秘密。应该返回的秘密存储在持久性存储器中。如果一个设备发送请求和接收响应表示成功,那么该会话被验证,那么设备可以发送其他请求。Params:"android_id":AndroidAPI提供的唯一设备标识符"swiftp_version":安装的FTP服务器版本Returns:"secret":此设备将用来认证密码的“秘密”Errors:12:ANDROID_ID的完整性检查失败Action:authenticatePurpose:验证设备。在调用任何其他命令之前调用(除create_account)。Params:"android_id":AndroidAPI提供的唯一设备标识符"secret":这个设备的秘密"swiftp_version":安装的FTP服务器版本Returns:EmptyobjectonsuccessErrors:11:ANDROID_ID不在数据库中,或秘密是错误的Action:start_command_sessionPurpose:验证设备,并开始命令会话Params:NoneReturns:"prefix":前缀字符串用来识别这个会话和设备Action:data_pasv_listenPurpose:45 浙江大学城市学院毕业论文致谢使代理开始在新的端口监听从FTP客户端来的TCP连接请求。在代理已经收到了从FTP客户端的PASV命令以后,这个action将会被本应用程序调用,之后代理可以开始监听来自ftp客户端的入站数据连接请求。Params:NoneReturns:"address":一个字符串,给出FTP客户端应该连接的地址"port":一个数字,给出服务器正在侦听的端口。Errors:NonespecifictothisrequestAction:data_pasv_acceptPurpose:一个pasv_listenaction后,代理将监听从FTP客户端来的入站连接。此请求将使得代理为FTP客户端传入的连接执行一个accept()方法。pasv_accept必须通过相同的连接发送相关的pasv_listen请求。成功后,则返回空的JSON对象,socket将会进入代理模式,它会简单地在FTP客户端和本应用程序之间来回传递数据(它将不再接受请求)。Params:NoneReturns:EmptyobjectonsuccessErrors:13:代理等得太久没有收到一个连接请求Action:data_port_connectPurpose:打开一个给定的地址和端口的出站连接,并开始数据转移。如果这个动作是成功的,则TCP连接将不再接受JSON请求,将成为一个简单的双向代理之间FTP客户端和SwiFTPAndroid应用程序。Params:"address":代理应该打开的一个连接地址"port":代理应该打开的一个连接端口Returns:EmptyobjectonsuccessErrors:14:代理无法打开连接到给定的地址和端口。Action:accept_control_connectionPurpose:当有一个控制连接从FTP客户端发出,Android设备将被通知,在这个端口上它会连接一个新的socket,进行身份验证,并发送此请求。如果申请成功,则套接字将停止接受请求,并成为一个纯粹的在FTP客户端与之间本应用程序的代理。Returns:EmptyobjectonsuccessErrors:11:验证失败代理服务器向本应用发送的请求:45 浙江大学城市学院毕业论文致谢Action:control_connection_waitingPurpose:这是发送命令连接指示本应用程序在给定的位置打开一个新的socket,并使用它作为一个新的FTP连接。这意味着有一个FTP客户端已连接,正在等待服务。本应用程序会打开一个新的连接到代理服务器,身份验证,然后发送accept_control_connection。Params:"port":本应用程序应该连接的端口Errors:Nonespecifictothisrequest任何一方都可能发送的请求:Action:noopPurpose:什么都不做,可以作为一个持续的连接Params:noneReturns:emptyresponse错误代码列表:0:内部服务器错误。,errorString值可能包含更多的信息。10:不能创建一个帐户,ANDROID_ID已经有一个帐户11:ANDROID_ID或秘密是无效的12:无效ANDROID_ID的值13:PASV模式时socket在pasv_accept接受等待超时14:在port_connect出站socket连接错误5.2关键代码实现5.2.1代理连接当要在PORT模式传输数据时,这个函数由ProxyDataSocketFactory调用。发送data_port_connect请求到代理服务器,包含连接到FTP客户端的IP和端口。publicSocketdataPortConnect(InetAddressclientAddr,intclientPort){try{myLog.d("Sendingdata_port_connecttoproxy");Socketsocket=newAuthedSocket(this.hostname,45 浙江大学城市学院毕业论文致谢Defaults.REMOTE_PROXY_PORT);if(socket==null){myLog.i("dataPortConnectgotnullsocket");returnnull;}JSONObjectrequest=makeJsonRequest("data_port_connect");request.put("address",clientAddr.getHostAddress());request.put("port",clientPort);JSONObjectresponse=sendRequest(socket,request);if(response==null){returnnull;//loggedelsewhere}returnsocket;}catch(JSONExceptione){myLog.i("JSONExceptionindataPortConnect");returnnull;}}传入一个从pasvListen()返回的socket,通过socket发送data_pasv_accept请求到代理,使得socket为向FTP客户端传输数据做准备。客户端将被告知已经被PASV命令的响应连接。publicbooleanpasvAccept(Socketsocket){try{JSONObjectrequest=makeJsonRequest("data_pasv_accept");JSONObjectresponse=sendRequest(socket,request);if(response==null){returnfalse;//errorisloggedelsewhere}if(checkAndPrintJsonError(response)){myLog.i("Errorresponsetodata_pasv_accept");returnfalse;}//Theproxy"sresponsewillbeanemptyJSONobjectonsuccess45 浙江大学城市学院毕业论文致谢myLog.d("Proxydata_pasv_acceptsuccessful");returntrue;}catch(JSONExceptione){myLog.i("JSONExceptioninpasvAccept:"+e);returnfalse;}}5.2.2会话线程通过已经建立的数据socket发送一个字节数组publicbooleansendViaDataSocket(byte[]bytes,intstart,intlen){if(dataOutputStream==null){myLog.l(Log.INFO,"Can"tsendvianulldataOutputStream");returnfalse;}if(len==0){returntrue;//thisisn"tan"error"}try{dataOutputStream.write(bytes,start,len);}catch(IOExceptione){myLog.l(Log.INFO,"Couldn"twriteoutputstreamfordatasocket");myLog.l(Log.INFO,e.toString());returnfalse;}dataSocketFactory.reportTraffic(len);returntrue;}从假设已经被连接的数据socket收到一些字节,字节被放置在给定的数组,并返回成功读取的字节数。publicintreceiveFromDataSocket(byte[]buf){45 浙江大学城市学院毕业论文致谢intbytesRead;if(dataSocket==null){myLog.l(Log.INFO,"Can"treceivefromnulldataSocket");return-2;}if(!dataSocket.isConnected()){myLog.l(Log.INFO,"Can"treceivefromunconnectedsocket");return-2;}5.2.3TCP连接监听如果的TcpListener线程在接受时被阻塞,关闭socket将引发一个异常publicvoidquit(){try{listenSocket.close();}catch(Exceptione){myLog.l(Log.DEBUG,"ExceptionclosingTcpListenerlistenSocket");}}监听到客户端连接请求publicvoidrun(){try{while(true){SocketclientSocket=listenSocket.accept();myLog.l(Log.INFO,"Newconnection,spawnedthread");SessionThreadnewSession=newSessionThread(clientSocket,newNormalDataSocketFactory(),SessionThread.Source.LOCAL);newSession.start();ftpServerService.registerSessionThread(newSession);}}catch(Exceptione){45 浙江大学城市学院毕业论文致谢myLog.l(Log.DEBUG,"ExceptioninTcpListener");}}程序运行效果图如下图5.2所示:图5.2程序运行效果图45 浙江大学城市学院毕业论文致谢第6章系统实现6.1Server端模块的设计Server端启动的时候,会加入到一个组播地址中,然后初始化Socket,对规定的端口进行侦听。当请求连接的报文到来时,performAuthentication会对用户的合法性进行验证,Server端向手机端发送一个验证包,等待手机端的响应;当收到的响应报文数据与预期的数据相等时,验证通过,否则拒绝连接。连接成功后,会解析到的报文。由handldReceiveData类处理收到的不同命令,并且发送SendPacket与客户端进行交互。为了提高程序的响应速度,多处使用子线程,这样异步处理各种不同事件,避免了事件之间的盲等。当前没有处理任务时可将处理器时间让给其他任务,占用大量处理器时间的任务可以定期将处理器时间让给其他任务,并可随时停止某个任务,设置各个任务的优先级,以此优化性能,提高了程序的运行效率,减少了服务器的响应时间,提高了CPU和网络I/O的利用率。PublicsynchronizedvoidhandleReceiveDeta(AbstractPacketpacket,TcpConneetionconnection){LOGGER.info("Receivedcommand:"+packet.toString());Commandcommand=packet.getCommand();if(command==Command.BASE_LIST_REQ){retumPacket=null;}elseif(command.getCornmandType()==CommandType.LIST){if(command==Command.CLOSE){...}45 浙江大学城市学院毕业论文致谢}elseif(command==Command.ON){etrlPoint.operate("powerOn");}elseif(command==Command.STOP){...}}6.2Android设备端模块的设计当手机启动控制模块时,会新建一个线程。此线程内,首先会创建一个Socket,建立一个控制连接到代理服务器,随时等待客户端请求连接的命令到来。当客户端访问ftp请求时,向代理发送连接命令,代理通过控制连接向Android设备发送命令。当手机接收到消息后,启动身份验证机制,进一步对客户端做出应答。Android端通过CommandControl类与Server进行消息的传递,它本身接受本地网络、远程网络信息两个参数,每次TCP连接都会新建一个TcpClient类对象,TcpClient类对象封装了TCP连接,设有监听器netDataRecieved方法,对报文进行响应处理。其中CommandControl类定义了一组请求操作,包括USER命令、LIST命令等。为了减少资源占用,CommandContwl采用单例的形式,只与一个Server进行通信。当尝试与新的Server进行通信时,CommandControl会关闭之前的连接,网络具有很大的吞吐量。多处使用子线程处理界面控件和耗时的操作。这样用户在与Server进行交互的同时,还可以进行本地的操作,系统被阻塞的时间很短。publicintonPasv(){clearState();proxyConnector=Globals.getProxyConnector();if(proxyConnector==null){myLog.l(Log.INFO,"UnexpectednullproxyConnectorinonPasv");clearState();45 浙江大学城市学院毕业论文致谢return0;}ProxyDataSocketInfoinfo=proxyConnector.pasvListen();if(info==null){myLog.l(Log.INFO,"NullProxyDataSocketInfo");clearState();return0;}socket=info.getSocket();proxyListenPort=info.getRemotePublicPort();returnproxyListenPort;}publicbooleanonPort(InetAddressdest,intport){clearState();proxyConnector=Globals.getProxyConnector();this.clientAddress=dest;this.clientPort=port;myLog.d("ProxyDataSocketFactoryclientportsettingsstored");returntrue;}publicSocketonTransfer(){if(proxyConnector==null){myLog.w("UnexpectednullproxyConnectorinonTransfer");returnnull;}if(socket==null){//WeareinPORTmode(notPASVmode)if(proxyConnector==null){myLog.l(Log.INFO,"UnexpectednullproxyConnectorinonTransfer");returnnull;}45 浙江大学城市学院毕业论文致谢//Mayreturnnull,that"sfine.ProxyConnectorwilllogerrors.socket=proxyConnector.dataPortConnect(clientAddress,clientPort);returnsocket;}else{//WeareinPASVmode(notPORTmode)if(proxyConnector.pasvAccept(socket)){returnsocket;}else{myLog.w("proxyConnectorpasvAcceptfailed");returnnull;}}}45 浙江大学城市学院毕业论文致谢第7章系统测试7.1Android手机系统测试之打断事件Android手机提供的打断事件与以往手机有着一些机制上的不同,当然也有很多跟以前一样的机制。所以我们要从他的应用程序打断机理出发,定制本系统的系统测试用例的打断事件。打断事件一般分为系统基本打断事件;Back键;改变手机方向;长按Home键,切换应用程序;内容冲突检测(contentprovider);长按Power键,调出关机窗口;Home键回homeapp,当前测试的应用就会放到后台处于stop状态。如果想监控到Activity生命周期的变化,必然会在Create或Start等处有代码来进行处理。在startActivityForResu函数中,mInstrumentation.execStartActivity()一句让我们看到至少有一个mInstrumentation的对象受委托在启动Activity,这个委托是有可能加入监控动作的。 publicvoidstartActivityForResult(Intentintent,intrequestCode){........}在以perform开头的几个函数中,本系统再次发现了对mInstrumentation对象的调用。例如performStart()函数。 finalvoidperformStart(){...........}45 浙江大学城市学院毕业论文致谢该类的接口主要有以下几类:对Activity监控对象的处理接口,Activity状态改变时的回调通知接口,生成Activity和Application的接口,向Activity发送事件通知的接口,性能处理的接口等。7.2测试中发现的问题及修复在测试时发现调用无线数据传输方法后程序崩溃,最后发现应该在Manifest.xml配置文件中声明一下权限:7.3测试结果7.3.1开启服务开启服务logcat图如下图7.3.1所示:图7.3.1开启服务logcat图7.3.2客户端访问ftp地址客户端访问ftp地址logcat图如下图7.3.2所示:图7.3.2客户端访问ftp地址logcat图45 浙江大学城市学院毕业论文致谢7.3.3登陆验证输入用户名密码登陆后,登陆验证logcat图如下图7.3.3所示:图7.3.3登陆验证logcat图45 浙江大学城市学院毕业论文致谢结论由于Android设备不能够接受入站连接,但它可以自由创建出站连接。因此Android设备上建立永久保持一个TCP连接到代理服务器。我们称之为“命令连接”。在本课题中,利用代理服务系统作为Pc和Android手机的中介信使,解决了Android手机的入站连接限制。当FTP客户端希望通过代理连接,它启动一个正常的FTP连接到代理服务器。代理通知本应用程序有一个即将到来的FTP会话等待被建立。本应用程序建立另一个TCP连接到代理(除了现有的控制连接),这个连接将被用于专门从FTP客户端发送和接收数据。从而实现了任意客户端可以登录FTP服务器上传下载文件,实现无需数据线即可管理手机的功能。该应用程序功能实用,轻便小巧,是一款优秀的Android工具类应用。界面简洁友好,操作简单,附带使用说明。除此之外还存在一些不足之处,例如服务端的验证机制的安全性不是很高,只适合于个人使用,使用完毕后尽快关闭服务以防个人隐私资料的丢失。通过本次毕业设计我学到了不少新的专业知识。学会了如何查找文献,如何利用网络资源解决实际问题。在查阅一些Android专业论坛以及博客的过程中,发现开发应用软件时要善于借鉴前人的经验参考既有代码,避免“重复制造轮子”。45 浙江大学城市学院毕业论文致谢参考文献[1]姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统用,2008,11.[2]周毅敏,陈榕.Dalvik虚拟机进程结构分析[J].计算机技术展,2010,20(2):83.[3]王淑君.EDGE基带解调设计与实现[D].西安:西安电子科技大学大学,2009.[4]童中波.中国开源社区[EB/OL].http://my.oschina.net/wangfree/blog/77104,2012-09-06.[5]张鹏.Eclipse插件开发学习笔记[Z].北京:电子工业出版社,2008.[6]罗伟.基于Android平台的即时通讯系统的研究与实现[D].湖南:湖南师范大学,2009.[7]叶炳发.Android操作系统移植及关键技术研究[D].广东:暨南大学,2010.[8]SatyaKomatineni,DaveMacLean.ProAndroid3[M].American:DanielW.LewisKomatineni,2011.[9]WEnck,MOngtang,PMcDaniel.Understandingandroidsecurity[J].Security&Privacy,2009,32(1):50-57.[10]MOngtang,SMcLaughlin,WEnck.Androidpermissionsdemystified[J.Proceedingsofthe18thACMconferenceonComputerandcommunicationssecurity,2011,34(1):627-638.[11]贾裕.矩阵式二维条码生成技术的研究[EB/OL].[12]张仕成.基于GoogleAndroid平台的应用程序开发与研究[J].电脑知识与技术,2009,5(28):50-57.[13]赵亮,张维.基于Android技术的界面设计与研究[J].电脑知识与技术,2009,5(29).[14]耿东久,索岳,陈渝,文军,吕勇强.基于Android手机的远程访问和控制系统[J].计算机应用,2011,32(2):50-57.[15]雷丽晖,段振华.一种基于扩展有限自动机验证组合Web服务的方法[J].计算机学报,2005,28(4):635-643.45 浙江大学城市学院毕业论文致谢附录附录A文件传输协议简介文件传输协议(英文:FileTransferProtocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。FTP服务一般运行在20和21两个端口。端口21用于在客户端和服务器之间传输数据流,而端口20用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。一个主动模式的FTP连接创建要遵循以下步骤:客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。45 浙江大学城市学院毕业论文致谢客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。附录B应用程序界面代码主界面控制界面设置界面45 浙江大学城市学院毕业论文致谢45 浙江大学城市学院毕业论文致谢致谢本文是在鲍福良老师的关心和指导下完成的,从开始选题到现在完成论文,鲍老师给予了很多的帮助。特别是在前期的准备阶段至最后的修改阶段,老师在忙碌中抽出时间给我提出许多宝贵的意见,使得我们得以顺利完成毕业设计工作。在这几个月里,他渊博的知识和严谨的治学作风让我受益匪浅,谨此向老师表示最衷心的感谢!感谢同班同学在课题研究初期给予的帮助,在他们的帮助下课题才得以很好的展开,有了一个很好的开端,在此还要感谢寝室各位同学在测试阶段所做的帮助,因为他们的协助才得以高效率的完成本课题!在论文完成过程中,本人还得到了其他老师和许多同学的热心帮助,本人向他们表示深深的谢意!以下免费送您一百个优秀毕业论文题目,供参考。1.企业集团激励与绩效评价问题研究2.XXX地区中小企业财务管理现状问题研究3.XXX地区上市公司盈利质量实证研究4.XXX地区企业集团整合过程中的财务问题研究5.XXX地区中小企业的信用担保体系问题研究6.XXX地区上市公司财务预警问题研究7.企业并购前后财务状况变化问题研究8.以平衡计分卡为核心的绩效评价体系研究9.EVA在企业绩效评价中的作用研究10.关于我区中小企业引入风险投资问题研究11.我国上市公司经营目标的实证分析12.对内含报酬率法的再思考45 浙江大学城市学院毕业论文致谢13.利用平衡计分卡落实战略的案例分析14.基于EVA的企业业绩评价指标体系的构建与实施研究15.基于不同发展周期的企业财务战略选择研究16.集团公司全面预算目标的制定与分解17.现金流量折现法在评估公司战略中的应用分析18.财务指标与非财务指标在评估管理者业绩中的应用拟合19.我国企业财务管理目标的现实选择20.财务管理目标与企业财务核心能力问题研究21.企业财务管理中运用税收筹划的探讨22.建立以财务管理为核心的资源配置制度23.财务预警系统在财务管理中应用评价24.基于Excel的财务预警模型研究25.中西部地区中小企业财务战略选择问题研究26.中小企业纳税筹划问题研究27.企业投资过程中的纳税筹划问题研究28.企业集团纳税筹划问题研究29.企业纳税筹划中的风险规避问题研究30.从公司治理结构透视财务管理目标31.作业成本管理模式及其应用研究32.论管理层并购在我国的运用33.企业并购中的财务风险与防范34.跨国公司财务管理策略及其在我国的实践35.关于上市公司并购的财务分析36.跨国公司财务管理体制的比较与选择45 浙江大学城市学院毕业论文致谢37.跨国公司财务管理策略及其在中国的实践38.全球化与财务管理发展趋势及其模式选择39.财务治理与财务管理之异同40.EVA对传统财务管理的冲击41.企业财务管理机制重塑问题探讨42.财务管理发展的文化分析43.利益相关者合作模式下的财务管理目标选择44.行为财务管理探索——以价值管理为中心45.上市公司股利政策实证研究46.公司治理结构与财务管理目标问题研究47.产权理论分析与财务管理目标的现实选择48.金融工具创新与企业财务管理49.对价值链财务管理目标的探讨50.IT信息产业企业的财务管理51.期权在财务管理中的运用52.论创业投资在我国所面临的财务问题53.风险投资退出机制问题研究54.企业可持续发展与财务管理问题研究55.企业集团资金链构造问题研究56.内蒙古地区上市公司融资效率实证研究57.预算管理在ERP系统中的运用问题研究58.发展中小企业信贷融资的思考59.中小企业在不同发展阶段战略选择问题研究60.连锁经营企业财务管理创新45 浙江大学城市学院毕业论文致谢61.对我国中小企业风险投资的探讨62.中西部地区中小企业融资策略研究63.融资租赁在中小企业中的运用问题研究 64.对我国中小企业信用管理的研究65.对我国中小企业创业版上市公司成长性分析的探讨66.对连锁经营企业资金运行管理的思考67.推行全面预算管理 建立新型财务管理体系68.机会成本及其在企业财务管理中的应用69.建立以预算管理为中心的财务管理模式70.论边际成本在企业理财中的运用71.企业融资障碍及对策研究72.高新技术企业财务管理若干问题的思考73.企业的扩张与财务管理74.行为财务管理新论75.论破产企业财务管理存在的问题及对策76.企业核心能力与财务管理能力研究77.我区企业利用外资融资效率分析78.我区中小企业创新模式研究—基于财务视角79.企业集团成本管理的创新问题研究80.集团公司财务管理模式的探讨81.非营利组织财务管理面临的问题及对策研究82.企业激励与绩效评价问题研究83.我区企业集团财务战略选择问题研究84.非营利组织财务管理创新问题研究45 浙江大学城市学院毕业论文致谢85.企业集团资本运营问题研究86.论表内融资与表外融资的关系87.EVA—现代企业的最佳绩效评价指标88.对杜邦分析法的再思考89.EVA与传统业绩评价方法结合问题研究90.财务分析指标体系创新问题研究91.非财务分析法与财务分析法结合有效性研究92.非财务指标在业绩评价体系中运用的有效性问题研究93.关于经营者业绩评价的思考94.企业融资效率实证研究95.信息时代财务控制趋势分析96.期权在企业投资决策中的应用97.企业集团融资中的风险规避问题研究98.我区企业的融资创新问题研究99.现代资本预算技术在企业理财中的运用100.国有资本减持的财务风险研究45'