基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】

基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】

ID:463651

大小:3.95 MB

页数:41页

时间:2017-08-05

上传者:U-944
基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】_第1页
基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】_第2页
基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】_第3页
基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】_第4页
基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】_第5页
资源描述:

《基于Socket技术的Windows Mobile设备间的文件传输工具开发【开题报告+文献综述+毕业论文】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

本科毕业论文系列开题报告电子信息工程基于Socket技术的WindowsMobile设备间的文件传输工具开发一、课题研究意义及现状WindowsMobile是由微软公司提供的先进的移动设备操作系统,基于WindowsMobile的PocketPCPhoneEdition和Smartphone不仅为消费者提供了熟悉并且可以自定义的用户体验,同时也为企业用户提供了一个可扩展的平台,增加新的销售收入并带动业务增长。目前,移动用户对数据信息访问的需求明显增长。企业单位一直都在促使自身经营的数据信息供给更多用户访问,包括Internet在内的新型数据源的访问。这在PC机上已经成为可能。但在选择掌上设备企业方案时,必须考虑数据是否安全,连接点是否受限制,以及可选的软件、硬件、外设和服务是否充足等因素。Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。生成套接字,主要有3个参数:使用的端口号,传输层协议和通信的目的IP地址。通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序或网络的通信,实现数据传输的并发服务。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能。在WindowsMobile设备上实现基于Socket的文件传输,必须深入理解线程的处理技巧,同时将其灵活运用到通信网络编程中,完成文件传输的功能。二、课题研究的主要内容和预期目标主要内容:研究WindowsMobile设备上基于Socket的文件传输方法并用VisualStudio2008进行软件开发。预期目标:能够扫描当前的无线环境,发现周围的设备,显示他们的名字、MAC地址、信号强度(RSSI)、WiFi信道以及是否需要密码等信息,在利用WiFi建立设备与设备之间的连接之后,实现基于Socket的文件传输,并通过VisualStudio2008进行软件开发。 三、课题研究的方法及措施研究方法:本课题将嵌入式系统与Socket技术相结合,利用WindowsMobile设备上的WiFi建立设备与设备之间的连接,通过VisualStudio2008软件编写程序,实现基于Socket的文件传输。措施:首先通过查找资料熟悉Socket技术的基本原理,以及WindowsMobile设备上Socket的使用方法。然后熟悉VisualStudio2008的开发环境,了解C#程序的写法,通过学习和理解撰写所需要的软件需求文档。最后根据软件需求分析,列出所需要实现的功能,并且利用VisualStudio2008来实现,同时在真实设备中进行调试。四、课题研究进度计划2010.10.18~2010.11.19:阅读相关文献并撰写文献综述,完成外文文献的翻译,完成开题报告。2010.11.19~2010.12.31:掌握毕业设计课题基本内容并用VisualStudio2008进行软件开发。2011.1.1~2011.1.21:撰写毕业设计论文,完成初稿。2011.2.22~2011.4.1:对毕业论文进行修改,完成最终稿。2011.4.2~2011.4.15::上交毕业设计相关文档,准备好答辩PPT。五、参考文献[1]王洪富.电信级Socket通信框架的研究与实现[D].北京邮电大学:计算机应用,2004.[2]徐香明.基于SOCKET技术的集群网络监控管理实现[J].科技资讯,2010,18:20.[3]郝晓玲,赵刚,靳海英等.基于Socket的无线网络传输研究[J].中国西部科技,2008,7(29):23-24.[4]冯浩,苏磊.基于TCP的多线程网络文件传输系统[J].电子信息学院通信工程,2008,7(8):93-94.[5]王艳艳,郅晨,张俊业.基于嵌入式Linux的DM6446编码器的设计[J].电视技术,2010,34(3):17-19.[6]孔昊,胡银保.线程在基于Socket通信中的应用[J].兰州工业高等专科学校学报,2010,17(1):23-26.[7]骆斌,费翔林.多线程技术的研究与应用[J].计算机研究与发展,2000,37(4):407-410.[8]杨星星,张沛超,刘之尧等.基于多线程技术的数字保护实时仿真系统[J].电力系统保护与控制,2009,37(19):73-75. [9]贾广雷,刘培玉,耿长欣等.多线程技术及其在串口通信中的应用[J].计算机工程,2003,29(1):246-250.[10]陈根永,程亮,郭含等.基于多线程技术提高电量采集的实时性[J].微计算机信息,2009,25(25):87-88.[11]YoungHwanChoi,SunYeongChoi.Assessmentofsocketweldintegrityinpipings[J].Journaloflosspreventionintheprocessindustries,2009,22(6):23-28.[12]SunwookKim,ChanhoKim,YongwhaChung.TheoffloadingofsocketinformationforTCP/IPoffloadengine[C].Proceedingsofthe11thinternationalconferenceonAdvancedCommunicationTechnology,2009.[13]L.E.Caligiuri,L.N.Eiselstein.ProperDesignandFabricationofSocketWeldsforUseinSourService[J].MaterialsScienceForum,2010,638(4):75-80. 毕业论文文献综述电子信息工程Socket技术综述摘要:在网络通信中,Socket套接字明确了发送端到达接收端的有效途径,在网络传输层上建立通信关系,实现数据交互的接口。由于网络通信的复杂性,在建立通信关系的前提下,必须引进线程机制处理通信细节,以便保证各节点通讯的独立和并发。在WindowsMobile设备上实现基于Socket的文件传输,必须深入理解线程的处理技巧,同时将其灵活运用到通信网络编程中,完成文件传输的功能。关键字:套接字;线程;网络通信1.引言Socket编程技术作为进程问通信的常用技术,以其能够灵活定制包格式、灵活构造高效通信服务等优势成为构建基于TCP/IP协议的网络应用程序时最常用的开发技术之一。使用跨平台、电信级、IPV4和IPV6兼容的Socket通信框架,在开发基于Socket通信的网络应用程序时不必关心Socket通信部分的平台移植问题、Socket通信问题、IPV4与IPV6的兼容问题,而可以直接构造应用,从而大大加快开发进度。目前还没有一个具有上述功能的开放的框架可以被用来构建基于Socket通信的网络应用程序;而构建UDP服务器、TCP、TCP的长连接客户端往往成为构建Socket应用程序时的关键技术。因此构建一个支持多个TCP和UDP服务器、多个TCP长连接客户端的跨平台、电信级、IPV4和IPV6兼容的Socket通信框架对于加快项目开发进度、降低代码平台移植难度都很有意义[1]。2.Socket技术Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。生成套接字,主要有3个参数:使用的端口号,传输层协议(TCP/UDP)和通信的目的IP地址。通过将这3个参数结合起来,与一个socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序或网络的通信,实现数据传输的并发服务[2] 。Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,它定义两台计算机间进行通信的规范(也是一种编程规范),如果说两台计算机是利用一个通道,那么这个通道的两端就是这个套接字。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能[3]。文献[4]提出Socket分为两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流套接字针对面向连接的TCP服务应用,提供了双向的、有序的、无重复并且记录边界的数据流服务。数据报套接口对应于无连接的UDP服务应用,支持双向的数据流,但不保证是可靠、有序、无重复的。文献[5]指出:套接字接口(SocketInterface)是目前Linux上应用最广泛的一种进程间的通信机制。由于Socket本身不支持同步等待和超时处理,所以不能直接将其用于多进程间实时通信。Socket通信服务器采用预先创建线程的设计思路,为每个客户分配服务线程并保持客户端与服务器的连接状态,只在进程异常时断开连接状态。客户端的套接字及端口号保存于客户端信息表中,服务器先将接收到的Socket消息压入队列,由发送线程统一完成消息的中转。对于读写客户端信息表的情况,可采用线程互斥机制保护读写操作。3.多线程技术多线程技术能很好地解决并发多任务问题,提高资源的利用率和系统的整体性能,因此计算机的各个领域都对其进行了研究,从不同角度实现或增强了对多线程的支持。多线程提供了一种把程序划分成若干独立部分的方式。Java的编程机制还可以把程序转换成彼此分离的,能独立运行的子任务。而线程就是这些独立的子任务。在基于线程的多任务处理环境中,线程是最小的执行单位,是进行并发编程的关键[6]。线程是操作系统分配处理器时间的基本单位,是程序中一个单一的顺序控制流。合理地使用多线程技术,可以达到“宏观上并行,微观上串行”的执行效果,从而有效提高处理器的利用率[7]。传统操作系统中的单线程由进程控制块和用户地址空间、以及管理进程执行的调用/返回行为的系统堆栈或用户堆栈构成。如果把进程的管理和执行进行分离,进程作为操作系统中保护和资源分配的单位,允许一个进程中包含有多个可并发执行的控制流,这些控制流切换时不必通过进程调度,通信时可以直接借助于共享的内存区,这就是多线程[8]。文献[9]讲述了多线程的种类:多线程在实现方式上可以分为用户级多线程、混合级多线程和内核级多线程。(1)用户级多线程(ULT):这种方式是用线程库的方式来实现并调度线程,是语言级的线程提供机制。 (2)混合级多线程:在这种方式中,内核和用户级同时提供对多线程的支持,用户线程库调度用户线程映射到内核线程。核心调度内核线程运行,它是内核级多线程和用户级多线程的综合。(3)内核级多线程(KLT):在这种方式中,所有的线程都由操作系统内核来管理和生产的,如WindowsNT、OS/2都是支持内核级多线程的操作系统。文献[9]对各线程的同步问题,现在的操作系统提供了许多安全、高级的线程同步控制方法。以Win32系统为例,系统提供了同步对象来协调多线程的执行,同步对象有:冲突区(CriticalSection),事件对象(EventObject),互斥(Mutex)和信号量(Semaphore):(1)冲突区(CriticalSection):冲突区是一种保证在某时刻只能有一个线程能够访问某种资源的方法。受保护的资源用一个冲突区对象来表示,这个对象为所有线程共享,哪个线程占有该对象,哪个线程就可以访问受保护的数据,也只有拥有该对象的线程才可以访问该数据,并且只有当占有对象的线程释放对象,其他线程才可以抢占它。(2)事件对象(EventObject):事件对象用来标志某个事件是否发生,从而确定是否执行某个线程。当一个线程在执行某项任务之前,需要等待某一事件发生的时候,使用事件对象非常方便。(3)互斥对象(Mutex):互斥对象是用来控制共享资源的方法,每个线程要访问共享资源,都要首先获得互斥对象的拥有权。应用互斥对象编程的时候最复杂,但也是控制共享资源最为强大的方法,它不仅能够在一个进程内的线程之间实现资源的完全共享控制,而且可以在不同进程的线程之间实现。(4)信号量(Semaphore):信号量是允许多个线程同时访问同一资源的方法。信号量的核心对象用于资源计数,维持着一个最小值为0的计数,为0时对象无信号,这时候除非有线程释放该资源,否则其他线程无法访问该资源。大于0时对象有信号,这时候其他线程可以访问该资源。当有一个新的线程夺得了资源,计数值就会减l;当某线程释放了资源,计数值就会加l。文献[10]分析了建立在串口基础上的电量采集过程,利用多线程技术可实现变电站综合分析系统中电流,电压,功率因数等数据的实时采集、实时显示和实时分析,并对主变损耗,电量平衡等综合性能指标完成实时计算,并最终转化为图形的实时显示,同时对相关路线开关切换引起的电量统计方式的改变,能够自动识别并对电量进行自动处理。4.总结 Socket技术和多线程技术是一个不可分割的整体。两者在许多领域都有广泛的作用,并且两者之间通过互补互助,能更好的体现两个技术的实用性和重要性。参考文献:[1]王洪富.电信级Socket通信框架的研究与实现[D].北京邮电大学:计算机应用,2004.[2]徐香明.基于SOCKET技术的集群网络监控管理实现[J].科技资讯,2010,18:20.[3]郝晓玲,赵刚,靳海英等.基于Socket的无线网络传输研究[J].中国西部科技,2008,7(29):23-24.[4]冯浩,苏磊.基于TCP的多线程网络文件传输系统[J].电子信息学院通信工程,2008,7(8):93-94.[5]王艳艳,郅晨,张俊业.基于嵌入式Linux的DM6446编码器的设计[J].电视技术,2010,34(3):17-19.[6]孔昊,胡银保.线程在基于Socket通信中的应用[J].兰州工业高等专科学校学报,2010,17(1):23-26.[7]骆斌,费翔林.多线程技术的研究与应用[J].计算机研究与发展,2000,37(4):407-410.[8]杨星星,张沛超,刘之尧等.基于多线程技术的数字保护实时仿真系统[J].电力系统保护与控制,2009,37(19):73-75.[9]贾广雷,刘培玉,耿长欣等.多线程技术及其在串口通信中的应用[J].计算机工程,2003,29(1):246-250.[10]陈根永,程亮,郭含等.基于多线程技术提高电量采集的实时性[J].微计算机信息,2009,25(25):87-88.[11]YoungHwanChoi,SunYeongChoi.Assessmentofsocketweldintegrityinpipings[J].Journaloflosspreventionintheprocessindustries,2009,22(6):23-28.[12]SunwookKim,ChanhoKim,YongwhaChung.TheoffloadingofsocketinformationforTCP/IPoffloadengine[C].Proceedingsofthe11thinternationalconferenceonAdvancedCommunicationTechnology,2009.[13]L.E.Caligiuri,L.N.Eiselstein.ProperDesignandFabricationofSocketWeldsforUseinSourService[J].MaterialsScienceForum,2010,638(4):75-80. 本科毕业设计(20届)基于Socket技术的WindowsMobile设备间的文件传输工具开发 摘要在网络通信中,Socket技术是发送端到达接收端的一个有效途径,在网络传输层上建立通信关系,实现数据交互的接口。由于网络通信的复杂性,在建立通信关系的前提下,必须引进线程机制处理通信细节,以确保各节点通讯的独立和并发。在WindowsMobile设备上实现基于Socket的文件传输,必须深入理解线程的处理技巧,同时将其灵活运用到通信网络编程中,完成文件传输的功能。本课题首先介绍了Socket技术的原理,通过Socket技术,线程技术和网络通信方面内容,联系到WindowsMobile,在VisualStudio2008开发环境中进行应用程序开发,通过运用Socket技术,实现目标。本文研究并实现了WindowsMobile下的套接字连接和手机之间数据传输等操作。主要详细讲解了WindowsMobile下套接字的体系结构与核心功能类等必要的知识脉络;对主机域名解析服务与网络接入点相关操作技术做了进一步的了解和研究,并详细分析了WindowsMobile下的套接字连接的操作实现;最后在介绍了PC端的套接字连接相关知识的基础上,结合PC端套接字操作的程序流程,用代码实现系统数据传输,验证了研究的正确性,方向性和可靠性。并为手机间文件的相互传输提供了一个很好的服务平台。关键词:套接字;线程;网络通信;文件传输 AbstractInNetworkCommunication,Socketidentifiedaneffectivewayfromthesendertothereceiver,toestablishcommunicationsuponthetransportlayerandtoimplementtheinterfacefordatainteraction.Becauseofthecomplexityofnetworkcommunications,inordertoestablishcommunications,wemustintroducethreadmechanismprocessingcommunicationdetailtoensuretheindependenceofeachnode.InordertoimplementfiletransferringbasedonSocketinWindowsMobiledevices,wemusthaveadeepunderstandingabouttheskillsofthreadhandlingandmakeagooduseofitoncommunicationnetworkprogrammingtoimplementthefunctionoffiletransferring.ThispaperintroducestheprincipleofSockettechnologyfirst.ThenconnectSockettechnology,threadtechnology,networkcommunicationsskillswithWindowsMobiletoachieveourgoalwhichhavesimulationinVisualStudio2008.Bythemeansofresearching,ithasbeenimplementedtoconnectbySocketandtransferdata.Inthispaper,itismainlyexplainedindetailsaboutthesocketinWindowsMobileArchitectureandbasicknowledgeofthecorefunctionalclasses,etc.;ithasin-depthresearchanddevelopmentaboutthehostdomainnameresolutionservicesandtheoperationsofthenetworkaccesspointtechnology.ThenithasanalyzedindetailsonWindowsMobilerealizationofthesocketconnection;finallyithasintroducedthebasicknowledgeofthePCsideofthesocketconnection,combinedwithPC-socketoperationoftheprogramflow,codeimplementationofdatatransmissionsystemtoverifythecorrectnessandreliabilityoftheresearchandprovideagoodplatformforextractingandreceivingfilesformobilephones.Keywords:Socket;thread;networkcommunication;filetransfer 目录1 引言11.1研究背景11.2研究内容21.3研究现状22SOCKET技术及其线程通信32.1Socket技术简析32.2Socket的分类42.3线程原理72.4网络通信原理103SOCKET应用程序开发123.1WindowsMobile简介123.2VisualStudio开发环境介绍123.3网络连接的建立133.4.设备间的文件传输开发163.4.1新建工程173.4.2服务器端173.4.3客户端183.4.4应用程序测试194 结论22致谢23参考文献24附录:应用程序源代码26 1 引言Socket编程技术作为进程问通信的常用技术,以其能够灵活定制包格式、灵活构造高效通信服务等优势成为构建基于TCP/IP协议的网络应用程序时最常用的开发技术之一。由于开发基于Socket通信的网络应用程序时不必关心Socket通信部分的平台移植问题、Socket通信问题等一系列兼容性问题,可以直接构造应用,从而大大加快开发进度[1]。目前还没有一个解决兼容性的问题开放式框架,可用于构建基于Socket通信应用为基础的网络,而建立UDP服务器,客户端的TCP长连接往往是建立Socket技术的应用程序的关键所在。因此,建立一个支持多个TCP和UDP服务器,多个TCP长连接的客户端Socket通信框架对于大力加快项目开发进度,降低了移植代码的困难具有重大意义。1.1研究背景在早期,一个加利福尼亚大学的一个分校研究组,让他们将TCP/IP软件移植到UNIX操作系统中,并将结果提供给其他网点。他们创建了一个接口,应用程序可以通过这借口进行通信。并且他们认为只要有可能就使用以有的系统调用,对那些不能快速升级到已有函数集的情况,就再增加新的系统调用以支持TCP/IP功能。这样做的结果就出现了插口接口(BerkeleySocket),这个系统被称为BerkeleyUNIX或BSDUNIX。TCP/IP首次出现在BSD4.1版本release4.1ofBerkeleySoftwareDistribution。由于很多计算机商人都采用了BerkeleyUNIX,因此,Socket接口被广泛使用,也成了现在的标准。Socket的英文原意就是“孔”或“插座”,现在,作为BSDUNIX的进程通讯机制,取其后一种意义。表面意义为,通信间需要一个Scoket作为两者之间的媒介。1.2研究内容一般情况下,用户都会使用WindowsMobile设备上的WiFi模块来接入Access Node,以达到交互的目的。但是如果在没有AccessNode的情况下,同样也可以利用WiFi来建立设备与设备之间的连接,这就是所谓的Ad-hoc网络。本课题要求学生理解Socket网络编程的基本原理,研究如何在WindowsMobile设备上实现基于Socket的文件传输,并通过VisualStudio2008进行软件开发。研究内容主要包括:1.利用WiFi建立设备连接,为设备之间的文件传输提供前提;2.设备连接后,编写客户端和服务器端的两个应用程序,并进行设置;3.设置完成后,WindowsMobile设备之间利用Socket来实现消息的实时发送与接收,以完成设备之间的文件传输的目的。1.3研究现状网络通信技术随着应用需求的巨大增长而迅速发展着。目前,许多通信手段满足不了需求剧增的们,对于开发新的通信技术显得尤为重要。而Socket技术作为IT网络一个不可或缺和占主要地位的一部分。从80年代的早期起步到如今的成熟,Socket技术也更加的重要了,许多的IT领域都离不开Socket技术。如今世界在发展,科技在进步,网络更是日新月异,因此,Socket技术也会更加的发展,更加的体现了Socket的含金量。 2Socket技术及其线程通信本章讲述Socket技术的含义,提出Socket的原题,在本课题中的用处,以及线程技术的原理与含义。2.1Socket技术简析应用层通过传输层进行数据通信和信息交互时,会出现TCP和UDP同时遇到为多个应用程序进程提供并发服务的问题。而且多个应用程序进程可能需要通过同一个TCP协议端口传输数据。因此为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,区分来自不同应用程序进程间的网络通信和连接请求。通信的目的IP地址、使用的端口号和使用的传输层协议(TCP或UDP)是生成套接字主要3个参数。通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,实现数据传输的并发服务[2]。Socket可以看成在两个程序进行通讯连接中的一个端口,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中,实现数据传输。如图2-1所示。Socket(网络接口卡)SocketProgramAProgramBProgramBProgramA网络管理软件图2-1Socket传输示意图在Linux中的网络编程通过Socket接口进行,是一种特殊的文字描述符。Socket是使用标准Linux文件符(file descriptor)和其他程序通信的方式。在这里Socket编程采用客户端/服务器模式,如下图2-2所示。服务器客户端Socket21Socket43图2-2Socket客户端/服务器模式Socket是网络传输层供给应用层的编程接口,是一个数据交互的转接点。而传输层则在网络层的基础上提供进程与进程间的逻辑通道,应用层的进程则需要利用传输层向另一台主机的某一进程通信,从而达到信息交互。Socket编程对客户端和服务器应用程序进行开发研究,以便它可以在本地网络上进行通信,还可以通过互联网在世界各地进行交流。Scoket编写并运行客户端和服务器程序,双方通过建立一个套接字,并通过多种方式提高性能的socket数[2]。2.2Socket的分类常见的Socket有3种类型。(1)流式套接字(SOCK_STREAM):提供可靠的通信流量,采用面向连接的TCP协议,以确保数据传输的准确性和顺序。(2)原始套接字(SOCK_RAM):允许直接访问底层协议,功能强大,但不太方便使用,主要用于一些协议的开发。(3)数据报套接字(为SOCK_DGRAM):通过独立传输的数据包,是无序的,不保证可靠,无差错,它定义了一个连接为导向的服务,使用数据报协议UDP。 Socket编程使用客户机/服务器模式。因此,分为服务器端编程和客户端编程两部分。每一个Scoket用一个半相关(协议,本地地址,端口)来表示,Scoket也有一个功能类似于打开文件的函数,该函数返回一个整数socket描述符,通过Scoket建立数据传输来实现目的。其流程图如下图2-3所示。服务器端Socket()建立流程套接字客户端Socket()建立流式套接字Bind()配置本地端口和IPClose关闭套接字Close关闭套接字Bind()配置本地端口和IPListen()监听和接收服务器请求Connect()与远程服务器连接Accecpt()接收服务器请求建立连接关闭套接字(Close)关闭套接字(Close)Send()和Recv()发送和接收信息Recv()和Send()接收和发送信息图2-3客户端/服务器Socket通信流程图服务器端完成的功能是:处理某一可用端请求。因为是多客户,所以采用多线程,为每一个在线用户分配一个客户线程,实时处理每一个客户的实时请求。服务器结构如图2-4所示。 SocketSocket通讯线程a客户aSocketSocket线程b客户aSocketSocketServetSocket线程c客户a申请连接服务器程序图2-4服务器系统结构图(1)客户端代理类(Agent):此类存储对应客户端的数据,其包括登录用户名、Socket、互斥锁(mutex)等。该Socket对象构造一个输入in和一个输出流out,客户代理通过这一对输入输出流与客户端的Socket进行数据交互。(2)服务监听器(ServerSocket):由主程序启动,监听服务器的服务端口,为每一个请求连接的客户端建立一个客户代理线程。(3)客户代理线程(AgentThread):实时通过监听客户端的事务请求,按照“对话流程”进行解码,根据解析得到的事务类型,交给客户事务处理模块进行具体处理。(4)客户事务处理(Processor):处理客户的事务请求。根据客户的请求执行相应的数据处理和操作。通过引用用户列表中的客户代理发送消息。事务处理模块引用客户代理对象时,必须进行申请操作(wait()),之后释放资源。改模块根据事务类型,进行转发信息、注册用户、注销用户。(5)用户列表(Vector):存储每一个登录客户的客户代理(Agent),使得事务处理模块可以引用各个客户代理进行事务处理。 2.3线程原理多线程技术能够很好地解决并发多任务问题,提高资源的利用率和系统的整体性能,所以计算机的各个领域都对其进行了研究,从不同的角度实现或者增强了对多线程的支持。1.进程和线程的关系进程是系统分配资源的基本单位,具有动态性、并发性、和独立性,进程在自己的地址空间上运用,拥有各自独立的资源。一个进程包括代码、数据、堆栈、文件I/O和信号表等。进程间的关系如下图2-5所示[3]。进程1进程2PC寄存器PC寄存器代码段代码段静态数据静态数据动态栈动态栈堆栈堆栈图2-5进程间关系图为了解决多进程调用在处理并行性任务时的不足,因此提出了线程概念。比如把进程中的执行代码与资源分离,而在一个地址空间中可执行多条指令流,每条执行流就是一个线程。但是,线程目前还没有一个严格而统一的定义,简单地讲,线程就是程序中的单一顺序执行流。如下图2-6所示。进程线程1线程2寄存器寄存器……代码段堆栈堆栈静态数据动态栈图2-6程序中的单一顺序执行流 线程是处理调度的基本单位,线程为维护自己的控制流而保存寄存器和堆栈。通过以上的分析可以看出多线程技术的优点:(1)对于上下文的线程,线程之间越小,转换成本小,你可以节省一些不必要的开销;(2)相同的进程地址空间和系统资源线程之间共享,创建时,不必复制进程,与创建进程相比较,减少开销;(3)线程之间的通信比进程开销小;(4)由于线程共享资源少,支持多线程系统中的线程总数大大超过单线程进程。进程是资源分配的基本单位,线程是CPU调度的基本单位,同一进程内的线程共享资源,这为单线程进程短缺的提出了一个解决方案,对提高系统资源利用率有很重要的意义[4]。多线程在实现方式上可以分为内核级多线程、用户级多线程和混合级多线程。(1)内核级多线程:所有的现场由操作系统的内核线程来生产和管理,如WindowsNT,OS/2的,都支持多线程操作系统;(2)用户级多线程:这种方式是用线程库的实现方式和调度线程,线程提供语言层次的机制,提供用户级多线程有Pthread等;(3)混合级多线程:内核和用户级同时提供多线程的支持,同时提供用户映射用户线程库调度线程的内核线程,是内核线程调度运行的核心,它是内核级多线程和多用户级别综合线程。混合级多线程机制提供有Solaris2、Mach[5]。2.多线程的优缺点多线程技术在使用时需要充分考虑它的优缺点。而如何使用多线程技术,何时避免用它,是我们需要掌握一项重要的技术[6]。多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面的性能显著提高[7]:(1)多线程技术能够快速反应程序,用户界面,做其他工作的同时处于活动状态;(2)也确定了每个任务的优先顺序,并优化性能; (3)处理当前自由,你可以给其他任务的处理器时间的任务;(4)加工时间密集型任务,可以定期给其他任务的处理器时间;(5)可以随时停止任务[8]。对于是否需要创建多个线程,取决于各种因素。在以下情况下,最适合采用多线程处理:(1)耗时或大量占用处理器的任务阻塞用户界面操作;(2)每个任务必须等待外部资源,如远程文件或互联网连接;同样的,多线程也存在许多缺点,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括:(1)等待共享资源将导致程序运行速度较慢。这些共享资源主要是独占性的资源;(2)需要额外的线程来管理CPU开销。系统将带来的使用线程的上下文切换开销。而这种负担超过一定程度,多线程将使用一个单独的线程来更新数组中的每个元素;(3)线程死锁,也就是说,很长一段时间或资源竞争,线程死锁等多线程症状;(4)而公共变量读或写。当多个线程需要写公共变量时,后者往往会改变线程在线程上存储的数据,从而使前一个线程的参数被修改[9]。2.4网络通信原理随着科技的发展,网络走入我们的工作和家庭。OSI/RM模型定义了异种机连网的标准框架,为连接分散的“开放”系统提供了基础。它采用分层结构技术,将网络通信功能分为7层,每层完成一个特定功能。从低到高分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。其主要功能[10]:(1)物理层:建立,维护和拆除物理链路提供所需的机器和功能规格,提供传输介质上非结构化的传输码流和物理链路故障检测和指示;(2)数据链路层:为无差错帧传输点对点,和流量控制功能的网络层实体; (3)网络层:传输层提供端至端交换网络数据传输功能,使得路径选择,交换,网络传输拥挤收费及其他细节,传输层;及实体的建立,维护运输层结束与一个或多个条通信路径,对无法恢复的错误予以报告;(4)传输层:为了提供一个透明的实体将变成可见的,可靠的数据传输服务,以确保端到端的数据完整性,可以选择在网络层提供最适当的服务,建立,维护和传输功能;(5)会话层:实体相互合作,建立,维护和结束会话连接。完成通信过程,逻辑名称和物理名称对应对话提供管理服务;(6)表示层:为其提供可以解释所交换信息含义的服务;(7)应用层:提供用户服务。而其工作原理图如下图2-7所示[11]。应用层应用层表示层表示层会话层会话层面向会话连接传输层传输层网络层网络层网络层数据链路层数据链路层数据链路层物理层物理层物理层主机A中间结点主机B图2-7信息流动方向图 3Socket应用程序开发3.1WindowsMobile简介WindowsMobile是由微软公司提供的先进的移动设备操作系统,基WindowsMobile的PocketPCPhoneEdition和Smartphone不仅为消费者提供了熟悉并且可以自定义的用户体验,同时也为企业用户提供了一个可扩展的平台,增加新的销售收入并带动业务增长。目前,移动用户对数据信息访问的需求明显增长。企业单位一直都在促使自身经营的数据信息供给更多用户访问,包括Internet在内的新型数据源的访问。这在PC机上已经成为可能。但在选择掌上设备企业方案时,必须考虑数据是否安全,连接点是否受限制,以及可选的软件、硬件、外设和服务是否充足等因素[12]。3.2VisualStudio开发环境介绍VisualStudio97是最早的VisualStudio版本。包含有面向Windows开发使用的VisualBasic5.0、VisualC++5.0,面向Java开发的VisualJ++和面向数据库开发的VisualFoxPro,还包含有创建DHTML(DynamicHTML)所需要的VisualInterDev。1998年,微软公司发布了VisualStudio6.0。所有开发语言的开发环境版本均升至6.0。这也是VisualBasic最后一次发布,从下一个版本开始,MicrosoftBasic进化成了一种新的面向对象的语言:MicrosoftBasicNET。VisualStudio2008在三个方面为开发人员提供了关键改进:突破性的用户体验、快速应用开发、高效的团队协作。1.突破性的用户体验。VisualStudio2008提供的最新平台的密切联系,加快开发应用程序创建新的工具,其中包括Web,WindowsVista中的Office2007,SQLServer2008和WindowsServer2008平台。对于Web,ASP.NET的AJAX和其他新技术使开发人员能够快速创建更有效,更具交互性,更个性化的新一代Web体验。2.快速应用开发。为了帮助开发人员迅速创建先进的软件,VisualStudio 2008提供改进的语言和数据功能。VisualStudio2008还使开发人员能够创建从相同的开发环境创建.NET框架版本的应用程序。开发建设.NET框架2.0,3.0或3.5的应用程序,这意味着他们可以在同一环境中支持各种各样的项目[13]。3.高效的团队协作。VisualStudio2008中帮助开发团队扩大加强协作和完善的服务,包括帮助数据库专业人士,和图形设计人员加入到开发流程的工具[14]。VisualStudio2008提供了高级开发工具、调试功能、数据库功能和创新等功能,帮助在各种平台上快速创建当前最先进的应用程序。VisualStudio2008包括各种增强功能,为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持AJAX的Web应用程序[15]。3.3网络连接的建立一般情况下,我们都会使用WindowsMobile设备上的WiFi模块来接入AccessNode,从而达到上网的目的。我们通过扫描当前的无线环境,发现周围的AP接入点,显示他们的名字、MAC地址、信号强度(RSSI)、WiFi信道以及是否需要密码等信息。那么,我们如何利用WiFi来建立设备与设备之间的连接呢?其实就是所谓的Ad-hoc网络(或者说是点对点/P2P)如何在WindowsMobile设备上来建立的问题。如果说是在WindowsMobile设备上建立点对点的连接,那Bluetooth技术也是可以实现的。的确,利用Bluetooth建立设备与设备之间的连接确实是许多移动设备上的主流。但是,Bluetooth与WiFi相比,其带宽的劣势比较明显,而且传输距离也没有WiFi远。当然,一般来说,WiFi的功耗是要比Bluetooth大的,但是在某些应用场景下,我们侧重的是带宽和距离。因此,从以上分析来看,利用WiFi在WindowsMobile设备上建立点对点的连接,还是具备应用意义的。那么,如何在WindowsMobile上来建立Ad-hoc网络呢?下面以WindowsMobile2003seforPocketPC和WindowsMobile6Professional为例,一步一步给出配置步骤。首先,确定以WindowsMobile2003seforPocketPC设备为Server,WindowsMobile6Professional设备为Client。打开WiFi,然后点击设置->添加新的,这里设置网络名称为“MyPPCNet”,并选中“这是设备至设备(特定)连接” ,如下图3-1所示。图3-1添加新的WiFi网络在网络密钥中,选择验证已打开,数据加密已禁用或者自行选择数据加密。设置完成后,点击“OK”,在无线网络中,出现了“MyPPCNet”,点击它,在出来的右键菜单中,选择“连接”,使得该网络处于“连接”状态,如下图3-2所示。图3-2网络密钥设置Server端设置完以后,我们转向Client端,跟设置Server端一样,打开无线网络,然后在设置->连接中选择“WiFi”,系统会列出一堆扫描到的无线网络,从中我们可以发现刚刚在Server端建立的“MyPPCNet”,如下图3-3所示。 图3-3打开无线网络进行扫描在Client端设置“MyPPCNet”时,要根据Server端的设置来做,尤其是身份验证和数据加密等选项,如下图3-4所示。图3-4加入WiFi网络图经过一点时间,就可以发现“MyPPCNet”处于连接状态了,我们还可以查到对应的MAC地址、模式、信道等信息,如下图3-5所示。 图3-5WiFi网络信息至此,Server端和Client端之间的Ad-hoc网络已经建立[16]。3.4.设备间的文件传输开发在上段3.3节中,讲述了利用WiFi在WindowsMobile上建立Ad-hoc网络的方法。由于Ad-hoc网络建立了点对点的无线链接,因其具有方便、灵活、可配置的特点,所以不用接入点就能够实现设备之间的互联。并且讲述了建立点对点的WiFi无线链接后,WindowsMobile设备之间利用Socket来实现消息的实时发送与接收。现在在建立点对点的WiFi无线链接后,将进行WindowsMobile设备之间利用Socket来实现文件传输。3.4.1新建工程1.应用程序分为Server端和Client端,这里只是实现了简单的文件传输功能,并没有涉及深入,如断点续传功能。在Server和Client建立连接以后,在Server端将用户选择的文件传输给Client端,然后就结束传输。2.开发环境为VisualStudio2008+WindowsMobile2003forPocketPCSDK+WindowsMobile6ProSDK,使用MFC来开发。3.新建项目的时候,在AdvancedFeatures选项中,选中Windowssockets,以添加对Socket的支持。 4.在Server端和Client端的头文件中,加入文件信息的结构体:typedefstruct_SOCKET_STREAM_FILE_INFO{TCHARszFileTitle[128];//文件的标题名DWORDdwFileAttributes;//文件的属性FILETIMEftCreationTime;//文件的创建时间FILETIMEftLastAccessTime;//文件的最后访问时间FILETIMEftLastWriteTime;//文件的最后修改时间DWORDnFileSizeHigh;//文件大小的高位双字DWORDnFileSizeLow;//文件大小的地位双字DWORDdwReserbed0;//保留DWORDdwReserved1;//保留}SOCKET_STREAM_FILE_ONFO,*PSOCKET_STREAM_FILE_INFO;3.4.2服务器端5.在Server端添加按钮,在按钮的点击事件中,让用户选择本地文件,然后发送给Client端。在Client端添加按钮和Server端的IP地址输入框,在输入Server端的IP地址后,点击按钮,然后接收Server端发送过来的文件。6.这里使用的是CSocket来进行通信.CSocket里面的方法是阻塞式的,所以在发送、接收较大文件的时候,给用户的感觉就是死机一样,为了能够给用户进行提示,需要加入发送文件的进度条。那么如何来实现文件传输进度条呢?因为我们是分段进行传输的,即每次发送1024个Bytes,而文件的总大小是可知的。所以,在发送或者接收文件内容的时候,可以进行计数,从而知道完成的百分比,把相关信息显示在进度条上。(注意:这里只用到了文件大小的低位双字)7.关键代码如下:Server端:UINTdwRead=0;while(dwRead#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)#defineSHELL_AYGSHELL#endif#include//MFCcoreandstandardcomponents#include//MFCextensions#ifndef_AFX_NO_OLE_SUPPORT#include//MFCsupportforInternetExplorer4CommonControls#endif#ifndef_AFX_NO_AFXCMN_SUPPORT#include//MFCsupportforWindowsCommonControls#endif//_AFX_NO_AFXCMN_SUPPORT#include//MFCsocketextensions#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)#ifndef_DEVICE_RESOLUTION_AWARE#define_DEVICE_RESOLUTION_AWARE#endif#endif#ifdef_DEVICE_RESOLUTION_AWARE #include"DeviceResolutionAware.h"#endif#ifdefSHELL_AYGSHELL#include#pragmacomment(lib,"aygshell.lib")#endif//SHELL_AYGSHELL#if(_WIN32_WCE<0x500)&&(defined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP))#pragmacomment(lib,"ccrtrtti.lib")#ifdef_X86_#ifdefined(_DEBUG)#pragmacomment(lib,"libcmtx86d.lib")#else#pragmacomment(lib,"libcmtx86.lib")#endif#endif#endif服务器端:#include//TCPFileServer.cpp:Definestheclassbehaviorsfortheapplication.//#include"stdafx.h"#include"TCPFileServer.h"#include"TCPFileServerDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#endif//CTCPFileServerAppBEGIN_MESSAGE_MAP(CTCPFileServerApp,CWinApp)END_MESSAGE_MAP()//CTCPFileServerAppconstructionCTCPFileServerApp::CTCPFileServerApp() :CWinApp(){//TODO:addconstructioncodehere,//PlaceallsignificantinitializationinInitInstance}//TheoneandonlyCTCPFileServerAppobjectCTCPFileServerApptheApp;//CTCPFileServerAppinitializationBOOLCTCPFileServerApp::InitInstance(){#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)//SHInitExtraControlsshouldbecalledonceduringyourapplication'sinitializationtoinitializeany//oftheWindowsMobilespecificcontrolssuchasCAPEDITandSIPPREF.SHInitExtraControls();#endif//WIN32_PLATFORM_PSPC||WIN32_PLATFORM_WFSPif(!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);returnFALSE;}//Standardinitialization//Ifyouarenotusingthesefeaturesandwishtoreducethesize//ofyourfinalexecutable,youshouldremovefromthefollowing//thespecificinitializationroutinesyoudonotneed//Changetheregistrykeyunderwhichoursettingsarestored//TODO:Youshouldmodifythisstringtobesomethingappropriate//suchasthenameofyourcompanyororganizationSetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));CTCPFileServerDlgdlg;m_pMainWnd=&dlg;INT_PTRnResponse=dlg.DoModal();if(nResponse==IDOK){//TODO:Placecodeheretohandlewhenthedialogis//dismissedwithOK }//Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe//application,ratherthanstarttheapplication'smessagepump.returnFALSE;}Stdafx.h文件代码://stdafx.h:includefileforstandardsystemincludefiles,//orprojectspecificincludefilesthatareusedfrequently,//butarechangedinfrequently#pragmaonce#pragmacomment(linker,"/nodefaultlib:libc.lib")#pragmacomment(linker,"/nodefaultlib:libcd.lib")//NOTE-thisisvalueisnotstronglycorrelatedtotheWindowsCEOSversionbeingtargeted#defineWINVER_WIN32_WCE#ifndefVC_EXTRALEAN#defineVC_EXTRALEAN//Excluderarely-usedstufffromWindowsheaders#endif#define_ATL_CSTRING_EXPLICIT_CONSTRUCTORS//someCStringconstructorswillbeexplicit#ifdef_CE_DCOM#define_ATL_APARTMENT_THREADED#endif//turnsoffMFC'shidingofsomecommonandoftensafelyignoredwarningmessages#define_AFX_ALL_WARNINGS#include#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)#defineSHELL_AYGSHELL#endif#include//MFCcoreandstandardcomponents#include//MFCextensions #ifndef_AFX_NO_OLE_SUPPORT#include//MFCsupportforInternetExplorer4CommonControls#endif#ifndef_AFX_NO_AFXCMN_SUPPORT#include//MFCsupportforWindowsCommonControls#endif//_AFX_NO_AFXCMN_SUPPORT#include//MFCsocketextensions#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)#ifndef_DEVICE_RESOLUTION_AWARE#define_DEVICE_RESOLUTION_AWARE#endif#endif#ifdef_DEVICE_RESOLUTION_AWARE#include"DeviceResolutionAware.h"#endif#ifdefSHELL_AYGSHELL#include#pragmacomment(lib,"aygshell.lib")#endif//SHELL_AYGSHELL#if(_WIN32_WCE<0x500)&&(defined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP))#pragmacomment(lib,"ccrtrtti.lib")#ifdef_X86_#ifdefined(_DEBUG)#pragmacomment(lib,"libcmtx86d.lib")#else#pragmacomment(lib,"libcmtx86.lib")#endif#endif#endif#include

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭