前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇http协议范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
中图分类号:TP393 文献标识码:A文章编号:1009-3044(2007)04-10978-02
1 研究和应用价值分析
HTTP是TCP/IP协议族中重要的应用层协议,是WWW实现的技术基础。WWW是目前互联网上最重要的应用,也是互联网发展和普及的重要推动力。据IAB统计,目前Internet上80%的流量来自Web服务器。除了Web应用,其他很多服务,如文件传输、音频视频流传输等,也可以使用HTTP协议实现。应用软件和SQL服务器之间的数据交互和互联网上大部分的数据服务都是HTTP数据流。随着B/S模式的应用软件逐渐成为主流,Web Service等技术的发展,Internet上的HTTP数据量还会进一步增加。
而由于IPv6和IPv4的不兼容,不同协议栈的主机间无法进行HTTP通讯,甚至在一台双栈主机内部,纯粹(Native)的IPv4的软件也无法访问纯粹的IPv6 HTTP服务。同样,纯粹的IPv4 HTTP服务也无法被纯粹的IPv6软件使用。而目前绝大多数HTTP相关的应用软件无法兼容IPv6,重新设计开发这些软件要耗费大量的人力、物力和时间,同时造成现有软件资源的严重浪费,不符合IETF提出的IPv6过渡基本原则。
因此,如果能够设计一种支持HTTP协议的IPv4/IPv6应用层翻译网关,就能够在过渡阶段充分利用现有的大量软件资源,实现无缝的、高效的、低成本的过渡,是一种非常具有研究和应用价值的过渡解决方案。虽然只支持HTTP协议的应用层网关不能象网络层翻译网关一样实现所有数据的互通,但是能够实现至少80%的数据通讯也是很具有实用价值的。而且只支持HTTP协议可以简化设计,在性能、安全性和可靠性等方面也更容易控制。
2 可行性分析
2.1 使用方式实现互通的可行性
服务器(Proxy)技术不仅可用于HTTP协议,其他很多协议(如FTP和SOCKS等)也支持功能。目前技术应用最为广泛的是HTTP,服务器也是HTTP协议规范中重要的内容。在RFC1945(HTTP 1.0)和RFC2616(HTTP 1.1)中对服务器的定义和功能做了详细的规范。
目前HTTP服务器都是部署在两个网络之间,大部分情况是两个网络其一是内部网,另一个是互联网。由于大部分内部网使用IPv4内网地址(也被称为私有地址,如192.168.x.x),内联网上的主机无法和互联网上的主机直接通讯,所以使用服务器作为中介,同时起到网络防火墙的功能,对内部网进行保护,还能够对内部网和互联网之间的通讯进行控制和记录。很多具有公网地址(也被称为合法地址)的内部网出于安全考虑也使用服务器和互联网连接。
运行服务器的计算机至少要有一个公网地址和一个内网地址。目前绝大多数服务器只接受来自内部网的请求,但是可以向两个网络发送请求。服务器接受请求时,将内部网不同地址不同端口映射到同一公网地址的不同端口,并在服务器内部保存这种地址端口映射关系,再通过公网地址的这些端口连接到内网计算机所请求的各个服务器。当服务器返回信息时,再查找映射列表,把返回信息转发到各个请求连接的内网计算机,从而实现了内部网多台计算机通过同一个公网IP地址访问互联网,互联网上的计算机也只能得到服务器所在计算机的地址,因此可以对内部网起到保护作用。
由工作原理分析,服务器工作时,一个网络内部的通讯与另一个网络是没有任何关系的,理论上可以使用不同的IP协议。现在假设运行服务器的计算机是双栈主机,内部网是IPv6网络,而且服务器支持IPv6。服务器接受来自IPv6主机某端口的请求,将该请求通过IPv4地址某端口转发到IPv4网络上,并保存该地址端口映射关系。当IPv4服务器返回信息时再查找映射列表转发给IPv6主机,就实现了IPv6主机访问IPv4网络上的服务器。同理也可以实现IPv4主机访问IPv6网络上的服务器。如果服务器设计成可以接受来自两个网络的连接请求,就能够实现IPv4和IPv6网络的互通。
对于应用软件,它和服务器间的通信和另一个网络使用何种IP协议是无关的,只需要将请求交给服务器处理就可以了。因此不需要对两种IP网络上的软件做任何更改,只需要配置服务器就可以实现无缝的互通。在一个既有IPv4主机又有IPv6主机的混合网络或者双栈主机内部,各种软件之间也可以通过这种方式互通。对于不能接受IPv6格式地址的软件,可以使用域名请求连接。
比如对于IE浏览器,当没有配置使用服务器时,IE对地址栏中输入的信息进行判断,如果是IP地址,就根据地址连接服务器,如果是域名就进行解析,然后再连接服务器。在此过程中,如果操作系统或者浏览器其中一个不支持IPv6,就无法连接到IPv6服务器。而当在IE中使用服务器时,IE只是将域名发送给服务器,由服务器进行域名解析并连接到Web服务器,在整个通信过程中浏览器没有使用到最终Web服务器的IP地址。在访问IPv6服务器时,操作系统和浏览器可以都不支持IPv6,浏览器能够通过支持IPv6的服务器访问IPv6服务器,原因在于浏览器和网关之间的通信不牵扯到任何IPv6相关的信息。
由以上分析,使用方式实现IPv4和IPv6主机间互通理论上是完全可行的,同NAPT-PT技术有很多相似之处,所不同的是只支持HTTP协议,需要对应用软件进行服务器设置。
2.2 Java语言对IPv6的支持
Java从1.4版(也被称为Java2 1.4)开始支持Unix和Linux平台上的IPv6。在2004年新的Java 1.5版(也被称为Java5)开始支持Windows平台上的IPv6。Java增加了一系列的类和方法对IPv6相关的网络编程给予支持,而且尽最大可能与IPv4兼容,与协议栈交互等复杂的底层工作由Java运行环境(JRE)和操作系统完成,无需程序员和用户参与,极大的降低了IPv6开发和应用难度。
IPv6专用的IP地址类Inet6Address与IPv4专用地址类Inet4Address是同一个类.InetAddress派生出来的,兼容性非常高。除此以外,网络其他操作如获取地址、打开端口、建立和关闭连接等操作所使用的类和方法与IPv4是完全相同的,因此使用Java开发IPv6的网络软件与IPv4没有很大的区别,甚至一些IPv4软件无需重新编译就可以在新版JRE上支持IPv6。Java对IPv6的支持和兼容性是其他语言无法比拟的。
2.3 使用Java开发IPv4/IPv6网关的可行性
实现IPv4/IPv6网关的重点有两个方面:
(1)能够在两种不同类型的IP地址上各打开一个端口进行监听,接受来自其中一种IP地址某端口的连接请求,并能够使用另一种IP地址的某端口连接到所请求的服务器上。
(2)能够建立和维护一个IPv4和IPv6地址端口的映射列表,并且能够根据该映射列表将服务器的返回信息转发给发出请求的主机。
2.4 Java语言能够很好解决的两个方面问题
(1)Java使用ServerSocket(int port)创建服务器并打开端口进行监听连接请求,这一方法与IP地址类型是无关的,同时兼容两种IP地址。Java使用Socket(InetAddress address, int port)方法创建网络连接,其中InetAddress与IP地址类型也是无关的。因此使用同样的方法就能够实现在两种类型的IP地址上打开端口监听、建立连接等操作,兼容性非常高,在一个既有IPv4主机又有IPv6主机的混合网络中也一样能够很好的工作。
(2)Java支持多线程编程,对于每一个连接请求可以派生出一服务器线程,接受连接请求并根据请求的服务器地址转发请求。该线程直到传输结束或者出现错误时才被结束,因此在一个线程内部存在一对源地址源端口和目标地址目标端口的映射。当存在多个连接请求时就会有多个服务器线程,自动建立多个映射。这种映射列表是动态的,由多线程机制自动维护的,无需额外的编程就能够实现。
由以上分析,使用Java设计和开发支持HTTP协议的服务器网关是完全可行的,而且由于Java语言本身对网络编程的良好支持和对两种IP协议的高度兼容,设计和开发难度不会很大,能够保证性能和可靠性。
3 功能模块介绍
该网关的总体功能模块结构如图1所示,其中蓝色线表示控制流,红色线表示数据流,线端箭头表示控制或数据流向。
图1 总体功能模块图
3.1 启动管理管理器
该模块负责系统的初始化和启动工作,为其他模块提供各种必要的工作参数。该模块的运行是整个软件工作的第一步,也是其他模块运行的基础。
初始化操作包括从系统配置文件中读取各个配置参数,包括系统日志文件名、通信日志文件名、Web配置管理员口令、网关服务器端口号、是否记录通讯日志、是否打开调试模式等。如果系统配置文件不存在,启动控制器根据系统默认配置创建一个配置文件。
启动操作是在其所在的计算机所有IP地址上打开一个特定的监听端口,该端口号来自初始化操作,并将系统启动时间写入系统日志文件。
如果初始化和启动过程中出现严重的错误,如Java运行环境(JRE)不存在、端口已被占用等,将错误出现的时间和相关信息在控制台显示,同时写入系统日志文件,并关闭系统。
当系统正常启动后,在所有IP地址的特定端口上监听,直到系统被关闭。如果由来自客户端软件的请求,则通知线程管理器,启动一个新的网关服务器线程,处理该请求。如果有来自Web配置服务器的重新启动或关闭指令,则重新启动整个系统或者关闭系统。
3.2 线程管理器
该模块负责接受启动管理器的指令,启动一个新的网关服务器线程。如果在启动新线程的过程中出现错误,将发生错误的时间和相关信息写入系统日志文件。
当线程管理器收到来自网关服务器线程的结束信息时,结束该线程,并回收内存等系统资源。
3.3 网关服务器
该模块是整个系统的核心,负责处理来自客户端软件的连接请求,并向服务器转发该请求。当服务器返回数据时,再将数据转发给发出请求的客户端软件。该模块在线程管理器的控制下启动,系统中可以有多个网关服务器线程同时运行,每一个请求对应一个线程。当一次HTTP通信正确传输完毕或者由于错误通信无法继续时,网关服务器线程会产生结束信息,然后线程管理器会结束该网关服务器线程,并回收内存等系统资源。
该模块负责接受来自客户端的请求信息,获得来自客户端软件所请求的URI(Uniform Resource Identifier 同一资源定位符)和HTTP报头后,对其进行检查,如果出现格式错误或者无法识别的报头和URI,则向客户端软件发送一个HTML格式的报告错误,并产生线程结束信息。
连接请求检查无误后,根据URI连接服务器,并请求URI中所表示的资源。如果URI中使用域名,还要进行域名解析获得服务器的IP地址。如果HTTP报头中携带POST方法所产生的数据,则将报头发送给服务器软件。如果系统还配置了使用上一级服务器,则将HTTP报头和URI转发给上一级服务器。如果发现请求的服务器地址是所在计算机地址时,则连接到Web配置服务器上。如果在连接服务器的过程中出现域名无法解析、服务器不存在、连接服务器超时等错误时,向客户端软件发送一个HTML格式的错误报告,并产生线程结束信息。
与服务器连接正确后,产生一个数据流管道(Date Stream Pipe),管道一段连接到客户端软件,另一端连接到服务器软件。此时网关服务器只是一个简单的数据通道,不再对HTTP数据流进行任何操作和处理,实现了客户端和服务器间的透明传输。当客户端和服务器通信完毕正常关闭连接时,数据流管道会同时关闭,网关服务器产生线程结束信息。当网关服务器与客户端或服务器通信时发生无法连接、超时等错误,无法继续通信时,管道也会自动关闭,并向客户端发送错误信息。这种数据流管道的建立是实现IPv4和IPv6主机间HTTP互通的关键,是整个软件研究和设计的重点。
如果系统配置中选择了记录通信日志,则将客户端请求时间、IP地址、请求连接的URI写入通信日志文件。如果系统配置中选择了调试模式,则将经过数据流管道的所有HTTP报头和HTML文件源代码写入系统日志文件,包括来自客户端的数据和来自服务器的数据,在软件调试时用来查找错误。
3.4 Web配置服务器
该模块提供Web远程配置功能,能够对系统参数进行更改,重新启动系统和关闭系统。该模块使用与网关服务器相同的端口进行Web服务,用户使用Web配置功能首先要使用管理员口令登录,然后Web配置服务器读取系统配置文件,将系统目前各项参数以网页的形式发送给浏览器,用户可以通过Web表单的形式将更改后的参数发送给Web配置服务器,Web配置服务器改写系统配置文件并通知启动管理器重新启动系统。用户还可以通过Web管理器直接重启或关闭系统。
3.5 系统配置文件
系统配置文件记录了系统工作的各项初始参数,包括通信日志文件名、系统日志文件名、管理员帐号口令、网关服务器端口号、是否记录通信日志、是否打开调试模式等参数。
3.6 系统日志文件
系统日志文件记录了系统工作情况,如系统启动时间,启动和工作过程中出现的错误等。如果在系统配置中打开了调试模式,经过网关服务器的所有HTTP报头和HTTP源代码也记录在系统日志文件中,方便程序调试时查找和分析错误。
3.7 通信日志文件
通信日志文件记录了所有客户端的连接请求,包括客户端的IP地址,请求时间和所请求的服务器的IP地址或者域名。
4 测试和分析
4.1 互通测试
本网关研究和开发的目的是实现IPv4和IPv6网络间的HTTP互通,因此互通性是测试的重点,测试方法包括:检测浏览器和Web服务器能否正确通信,分析网关系统日志和使用CommView捕获帧进行分析。本项测试中各计算机运行的操作系统是Windows XP(SP2)和Windows Server 2003,浏览器使用IE 6.0,Web服务器使用的是IIS 6.0,并在IIS服务器上运行一个简单的ASP程序,检测浏览器能否通过GET和POST方法向服务器发送数据和服务器是否能够读取浏览器的Cookies信息。经测试,通过该网关软件IPv4和IPv6主机间可以实现HTTP数据流的互通,实现了设计目标。
4.2 性能测试
在试验网上进行了IPv4和IPv6互通四种情况下的性能测试,测试中Client1为Web服务器,Client2为客户端,网关软件在Gateway上运行,服务器和客户端之间通过HTTP协议传输一个750M的文件。测试数据如表1。
测试数据显示使用该网关软件互通吞吐率能够达到50Mbps以上,达到了比较高的水平。由测试数据分析发现,在互通过程中,Gateway CPU利用率始终为100%,可见互通的瓶颈出现在网关软件所在的计算机Gateway上,如果升级Gateway的CPU,互通性能可能会有所提高。从测试数据中还发现,在网络硬件和CPU占有率相同的情况下,IPv6主机间通信时吞吐率最高,IPv4主机间通信时吞吐率最低,差距达到了18%。以上测试数据再次说明IPv6协议比IPv4协议性能和效率上有较大优势。
参考文献:
[1]沙斐,程莉,周立译.Pete Loshin,IPv6详解[M].北京:机械工业出版社,2000(4).
[2]Robert L. Fink, Robert M. Hinden. 6bone (IPv6 Testing Address Allocation) Phaseout, RFC3701[S],2004(3).
[3]Joseph Davies著,张晓彤,晏国展,曾庆峰译.理解lPv6[M].北京:清华大学出版社,2004(3).
[4]Robert M. Hinden, Stephen E. Deering, Erik Nordmark. lPv6 Global Unicast.
[5]Address Format, RFC3587[S],2003(8).
[6]Robert M.Hinden, Stephen E. Deering. Internet Protocol Version 6 (IPv6) Addressing Architecture, RFC3513 [S],2003(4).
[7]Thomas Narten, Richard Draves. Privacy Extensions for Stateless Address Autoconfiguration in IPv6, RFC3041 [S],2001(1).
[8]Stephen E. Deering, Robert M. Hinden. Internet Protocol, Version 6 (IPv6) Specification, RFC2460[S],1998(12).
关键词:Photoshop 教学方法 教学措施
Photoshop 课是职校计算机专业常见的一门课,它以精美的图片吸引人,学生也容易产生兴趣。中职生,他们大多没有较好的学习习惯,自制力差,学习没压力,不努力。课堂上往往是兴趣虽有,可是主动性差,依赖性强。对老师的讲解,只是按部就班地照做,有时甚至是不予理会。那么如何提高Photoshop 的教学效率,吸引学生的注意力呢?笔者根据自身多年的教学经验,谈谈对这一问题的看法。
一、项目教学法与3W1H教学法
项目教学法是指学生一边学习,一边在教师的指导下亲自处理一个项目的全过程,学习的进度和内容与项目的进度一致,用项目贯穿课程的始终。学生以小组合作的工作模式安排学习行为,解决在处理项目中遇到的困难。在Photoshop的教学过程中,学生的动手能力是学习成败的关键,因此“项目教学法”是一个非常有效的教学模式。
3W1H教学法主要是将讲授思路概括为what、why、where和how。what明确要讲解的内容的是什么,why要说明为什么要学习上述内容,where指的是我们所学的内容能用在什么地方,how是通过什么方法能将内容讲清楚。运用此方法可以引导学生们主动去探索问题、思考问题、解决问题,改变了以往被动的学习模式。
每个教学方法都其优点和缺点,扬长避短,使用多种教学模式,能让Photoshop的教学更有效果。
二、提高教学质量的措施
1.善于在实际生活中发掘实例
鼓励学生参加各种平面设计的赛事,使学生在竞赛中体验成功及个人的价值。去年学校开展 Photoshop 设计比赛,笔者积极组织学生报名参加,帮助他们找机房练习,在笔者的积极带动下,学生们情绪高涨。要多从学生的实际出发,创造性的运用教材。学生在成功体验个人价值的同时,还要多拿些证书。学校提供给中职专业的学生很多考证书的机会,这对于学生来说,不仅仅是对自己知识的检验,更为以后就业打好坚实的基础,因此在学习这门课之前先把考核目标明确,对于学生来讲,更增加了一些压力和学习的动力,学生学习起来目标会更加明确,态度也会更加认真。实践证明,在最终的期末考核中,参加过技能竞赛和考证的学生,动手能力和期末考试成绩远远高于没有参加的学生。
2.注重技能应用
教学意在抛砖引玉,俗话说的好“师傅领进门,修行在个人”,由于课时的限制不可能面面俱到,所以在教学中注重对学生技能的拓展训练,激发学生自我挖掘潜能的欲望,让学生具备活用、巧用知识的能力。
在教学过程中坚持“以能力为本位”,重视课后的技能拓展训练。根据课堂教学实例训练的内容和效果,技能拓展练习部分多选取与课堂教学中使用的 Photoshop 工具基本相同却效果迥异的实例,在不做任何提示的情况下让学生自己操作,再根据训练结果进行分析、点评,这个过程中一定要注重与学生的交流互动,让学生成为解惑的主体,便于在以后的工作中遇到专业问题时具备自我解救的学习能力和应变能力。
3.定期归纳总结
(1)归纳工具类别和适用范围
在讲解了大量的工具以后,我们应该定期帮助学生把讲过的工具分类,帮助学生理解。结合大量的练习题,必要的工具要反复练习,例如修复工具,要求操作的精准,配合笔刷的直径硬度等参数才能用好,有的学生以为只是按住ALT复制就行了,不注意操作细节,结果做出的作品像涂鸦。比如钢笔工具,对于初学者是比较难掌握的工具,一定要掌握各种锚点的类型及特点,配合路径选择工具和直接选择工具以及辅助键,要配合大量的练习,才可以掌握其用法。基础工具的使用一定要多练,它关系到以后修图的质量和效果。
(2)归纳图像的处理方法
这里我们要跟学生强调:学习的是“处理方法”,切忌对操作步骤死记硬背,要举一反三,融会贯通。每隔一段时间,就要把讲过的修图方法归纳总结,为学生理清思路。
在教学的最后几个学时里,应为学生准备一些专题,如“较色调色”、“美白磨皮”、“拼接及合成”、“抠图技巧”等实用的照片处理方法,让学生把知识加以综合,并在实践中加以运用,让学生去发现学过的知识之间的联系,并在分析问题和解决问题中对学到的知识有更深切的体会,使之真正成为自己的东西。
(3)及时反馈和评价学生作业
对于一些优秀的学生作品,可以在课堂上即时展示给学生,课后也要把作业及时公布在该班级网站或者教学成果网站上。学生通过登录网站可以看到每个同学的作业以及教师的评价情况,也可以留言参与评论。通过这样的互评方式共享学生的学习成果。从学生的角度发现问题以及改正问题,从而培养学生的反思能力,最大限度的促进学生的发展。
(4)对学生要多作肯定评价
德国教育学家第斯多惠说过:“教学的艺术不在于传授本领,而在于激励、唤醒和鼓舞。”任何人都渴望被赏识,学生自然也不例外,当他们得到老师的赏识和肯定时,就认为自己是老师心目中的好学生,就能增强学习的动力。在教学中善于合理适当地应用激励手段,不仅可以增强学生的荣誉感、自豪感,而且可以活跃课堂气氛、激发学生的学习兴趣,增强学习信心,沟通师生情感交流,促进学生有意义学习。我在平时的教学中,用记分来鼓励学生完成作业,学生所得分数作为期末成绩中的一部分,学生们因此异常积极。尽管作品完成地有好有差,但只要是尽自己最大努力完成的作品就可以得分。这种方法可以大大提高学生的积极性和竞争意识,起到很好的效果。
参考文献:
[1]刘国兰,胡惠娟.高职 Photoshop 课程教学方法的改革与实践[J]. 计算机教育,2006.
1 网络需求分析
实验要求对于两台路由器所连接的六个子网进行连接,并要求在路由器上进行DHCP服务器的配置,来满足各子网中主机对于IP地址的动态请求。根据设计要求,设计了如图1所示的网络拓扑结构。
其中路由器1与路由器2分属于172.16.0.0/24和192.168.1.0/24网络,每个网络又划分出三个虚拟局域网(VLAN)[2],共六个子网:Vlan15、Vlan25、Vlan35、Vlan10、Vlan20、Vlan30。根据实际网络容量需求,可以在路由器上使用应用802.1q协议的单臂路由[3],并采用VLSM[4]技术来划分子网。各子网相关配置要求如表1所示:
2 配置实现
作为Cisco公司的一款网络学习软件,Packet Tracer能够有效地模拟网络运行环境,进行相关的网络设计、配置及故障排查等,尤其为路由器和交换机的学习提供了优秀的平台。在设计中选择路由器2作为DHCP服务器,在路由器1上设置“路由助手”,来满足各子网的IP地址请求。
在路由器2上,对于各子网的有效地址池(包括保留地址)、默认网关、DNS服务器累进行配置。以Vlan10的配置为例,可以在路由器的全局配置模式下,使用如下命令实现:
为了能够对于非直连网络内的主机进行IP地址请求响应,除了要保证网络的通畅连接之外,需要在作为网关的路由器1上设置“路由助手”,其IP helper address指向相连的路由器2(DHCP服务器)。
路由器1采用802.1q协议,对于Vlan15的相关配置如下:
3 测试
在各主机可以进行测试,如选择属于Vlan15的PC7,在命令提示符下使用“ipconfig /all”命令,可以查看当前通过DHCP得到的相关网络信息:
PC1和PC7都成功使用DHCP,自动完成了相关网络信息的配置。
在PC1中,使用“ping”命令进行与PC7的连接测试,得到如下响应:
4 小结
本次测试在Packet Tracer环境下,顺利实现了DHCP协议的配置,完成了不同网络中主机对于IP地址及相关网络参数的自动分配,进行了作为DHCP服务器的路由器及相关路由器的设置,对于网络设计的测试、网络架构的模拟实现以及DHCP在教学与研究中的应用都可以提供很好的借鉴。
参考文献:
[1] Droms, R..Dynamic Host Configuration Protocol[J]. RFC 2131, March 1997.
>> 蓝牙协议栈软件设计 LTE空中接口协议栈的研究与实现 可信软件栈在嵌入式系统中的自动化测试分析 针对ZigBee协议栈的分析 对于TCPIP协议栈与网络攻击的分析 软件测试方法的分析与研究 基于软件测试的策略与测试方法应用分析 TCP/IP协议栈基于语法的健壮性测试 软件测试方法概述 软件测试方法浅析 软件测试方法研究 软件测试方法浅谈 WLAN协议分析及测试 LTE/LTE―A MIMO原理及测试分析 一种在ZigBee协议栈中建立用户网络地址链表的方法 传感器网超轻量IPv6协议栈一致性测试系统的设计 软件测试用例的设计方法分析 计算机软件的测试方法与分析 计算机专业软件测试方法分析 软件测试方法的分析与实践研究 常见问题解答 当前所在位置:.
[3] 3GPP. 3GPP TS 36.331, evolved universal terrestrial radio access, radio resource control (RRC) protocol specification [S/OL]. [2008?12?11]. http:// /ftp/Specs/html?info/36331.htm.
[4] 3GPP. 3GPP TS 36.323, evolved universal terrestrial radio access, packet data convergence protocol (PDCP) specification [S/OL]. [2008?12?11]. http:// /ftp/Specs/html?info/36323.htm.
[5] 3GPP. 3GPP TS 36.322, evolved universal terrestrial radio access, radio link control (RLC) protocol specification[S/OL]. [2008?12?11]. http:// /ftp/Specs/html?info/36322.htm.
[6] 3GPP. 3GPP TS 36.321, evolved universal terrestrial radio access, medium access control (MAC) protocol specification[S/OL]. [2008?12?11]. http:// /ftp/Specs/html?info/36321.htm.
[7] LAMPING U. Wireshark developer′s guide for wireshark 1.11[EB/OL]. [2013?01?11]. http:///docs/ wsdg_html_chunked.
[8] Anon. MAC?LTE wiki [EB/OL]. [2012?04?09]. http:///MAC?LTE.
[9] Anon. LTE eNB L1 API Definition v1.1 [EB/OL]. [2010?10?12]. http://.
关键词:IM;HTTP;J2ME;Jabber;XML
中图分类号:TP393文献标识码:A文章编号:1009-3044(2010)20-5661-04
Instant Message Applies Combined Set
HU Wen-sheng1, LI Guo-hua2, HU Yan-ping2
(1. Commercial College of Guizhou, Guiyang 550000, China; 2. Hunan Xinning No2 Middle School, Xinning 422713, China)
Abstract: This thesis discusses that Instant Message on the base of Jabber Protocol applies Combined Set and introduces the process of communication between client and server.
Key words: IM; HTTP; J2ME; Jabber; XML
本文讨论了基于Jabber协议的即时通讯在手机上的应用,详细介绍了各种移动终端设备的客户端程序与服务器端之间通过互联网及移动数据网进行实时多媒体互动交流。不仅可以传输文本信息,更可实现图像、音频、视频的互动,同时还可以收发电子邮件。
1 基本概念
1.1 即时通讯(IM)
即时通讯也叫即时消息传递(Instant Message ,IM)是基于互联网协议的应用程序,它能够使应用不同类型设备的用户一对一进行通信。IM最流行的形式是聊天,在聊天的同时可以在计算机之间交换短文本消息。目前在国内用得最广、深受广大网民喜爱的即时通讯产品要算腾讯QQ和微软的MSN了。随着无线应用协议(Wireless Application Protocol,WAP)和移动电话类的手持设备的出现,即时通讯越来越多的应用于各种移动电话上。
1.2 Jabber XML协议的结构
Jabber即时通讯系统与其他即时通讯不同,它是基于源代码开放的XML协议。这样的好处是使超长传输的分布性更好也更易访问。客户端程序与服务器之间的通信发生在指定的端口上,在交换数据时,构造各种符合Jabber XML协议的数据包,以XML流的形式进行传递。 Jabber的开放式XML协议包括三个顶层XML元素(也称为标记):
,此元素用来确定用户的状态。其格式为:Onlinenone-audio。表明9054这个用户发送给用户为9063,同时也表明了用户9054的状态。
,此元素用来包含两个Jabber用户间互相发送消息的内容。其格式为:aaaaaaa22222222var _userid = '';var _siteid =2230;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =156; UrchinTrack();。
,此元素的意思是信息/查询。该元素主要是用来在两个用户之间构建一个根本的会话,并且允许它们来回传送XML格式的请求和响应。信息/查询的主要用处是取得或设置公共的用户信息,比如名字,电子邮件,地址等等。其格式为:
我的朋友
2 通信模式的建立
在整个通信过程中涉及到三个角色:客户端、服务器、网络(包括互联网及移动数据网)。客户端可以是移动电话类的手持设备和PC机端的应用程序,在本文中主要是指手机上的应用程序。服务器端包括Dispatch服务器、若干个Jabber服务器、数据库。客户端通过HTTP与服务器端进行数据交换,交换过程中涉及到两个XML流:一个流把数据包从客户端提交到服务器上;另一个流把数据从服务器提交到客户端。当用户想进行通信时,只要启动手机上的客户端程序进行登录,发送一个包括用户登录号和密码的HTTP包给服务器端Dispatch,Dispatch根据用户的登录号和密码到相应的数据库中查询、对比,进行身份验证,若验证成功,给客户端程序返回一个HTTP应答包,在返回的HTTP应答包中包含了分配给该用户的一个Jabber服务器的IP地址和通信的端口号,随后客户端就向指定Jabber服务器发起HTTP连接请求,获得HTTP连接标识,这样就可以利用这个标识进行一系列的通信活动。若服务器端没有通过客户端的身份认证,则会返回给客户端一个错误提示,同时断开与该用户的连接。
3 具体通信过程及客户端实现的效果
3.1 获取Jabber服务器的IP地址和端口号
客户端应用程序首先必须知道自己应该与哪个Jabber服务器进行通信,所以它必须要通过服务器端的Dispatch这个模块来获取与之通信的Jabber服务器的IP地址和端口号。为此它首先得发送一个数据包给Dispatch,Dispatch收到这个包后进行解析,到数据库中进行查询、验证后再回复客户端应用程序。成功的话,返回某个Jabber服务器的IP地址和端口号。在客户端应用程序与服务器端进行联系时都涉及到基于HTTP协议的连接,而HTTP协议是一个请求/响应型的协议,在发送请求时必须同时发送请求所需要的数据。利用HTTP连接发送数据主要有两种方式:GET和POST方式。在GET方式下,发送的数据是被当作URL的一部分被发送到服务器端,这种方式只能传送编码的文本信息,并且传送的数据大小有限制;而在POST方式下,发送的数据被当作数据流的形式单独向服务器发送,这种方式可以传递任意格式的数据(包括二进制格式的数据),并且传送的数据没有大小限制。Sun公司推出的J2ME的CLDC中有专门用于进行网络通信的类库包javax.microedition.io,使用该类库包下定义的HttpConnection类可以实现HTTP连接。当客户端应用程序向服务器发送请求连接的包之后,就可以使用getResponseCode()方法来获得服务器端返回的状态码。通过读取这个状态码,客户端的应用程序就会知道服务器端处理数据的状态,如果服务器端返回的状态码是HttpConnection.HTTP_OK,就表示服务器端处理数据成功,否则服务器端处理数据失败,客户端须得重新发送连接请求。具体情况如下:
1) 客户端向服务器端Dispatch请求与它匹配的Jabber服务器的地址
向服务器端的Dispatch发送一个HTTP包的内容为:
GET /dispatch.xml?Id=9063@pica&Version= HTTP/1.1
X-Online-Host: 211.90.198.191:80
User-Agent: Profile/MIDP-1.0 Configuration/CLDC-1.0
User-Agent: UNTRUSTED/1.0
Content-Length: 0
Host: 211.90.198.191:80
由于客户端应用程序只是想要获取与之进行通信的那个Jabber服务器的IP地址和端口号,所以发送的数据量并不是很多,所以采用了GET方法发送只有HTTP包头的数据包就可以了。由这个包我们可以看出Dispatch所在的IP地址是211.90.198.191:80,当它收到这个包时,立即进行解析,获得了该用户的登录号和密码,然后根据该用户的登录号到中心数据库中去查询、验证,决定它与哪个Jabber服务器通信,从这里可以看出,服务器端的Dispatch模块起调度、分配作用,因为随着用户数量的不断增加,一个或几个Jabber服务器显然满足不了需要,必须要随着用户数的增加,随时增加服务器端的Jabber服务器的数目,怎样决定哪些用户与哪个Jabber服务器通信?就由Dispatch模块来决定。
服务器端的Dispatch给该用户返回的包的内容为:
HTTP/1.0 200 OK
Server: jabber/http-0.4
Expires: Fri, 10 Oct 1997 10:10:10 GMT
Pragma: no-cache
Cache-control: private
Connection: close
Content-Type: text/xml
Content-Length: 67
Ip=219.235.1.137
Port=4998
Domain=pica
Resouce=pica
Time=1200
客户端的应用程序按照Jabber XML协议的结构来解析这个包之后,得知自己应与IP地址为219.235.1.137,端口号为4998的Jabber服务器进行通信。于是服务器端的Dispatch模块就不再与客户端的应用程序打交道了。
客户端的发包和收包函数为:
void httpRequest(String page_path) throws Exception{
……………
//发送的HTTP包的包头
hcon=(HttpConnection)Connector.open(" 211.90.198.191:80",
Connector.READ_WRITE,true);
hcon.setRequestMethod(HttpConnection.GET);
hcon.setRequestProperty("X-Online-Host","211.90.198.191:80");
hcon.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
//发送的HTTP包的包体
if(xmlParam!=null){
bytearrayoutputstream=new ByteArrayOutputStream();
dataoutputstream1=new DataOutputStream(bytearrayoutputstream);
dataoutputstream1.writeUTF(xmlParam);
byte abXmlParam[]=bytearrayoutputstream.toByteArray();
hcon.setRequestProperty("Content-Length",""+(abXmlParam.length-2));
dos=hcon.openDataOutputStream();
dos.write(abXmlParam,2,abXmlParam.length-2);
}
///以下为收包的过程
if((hcon.getResponseCode())!=hcon.HTTP_OK)
throw new Exception("invalid response");
int recvs=(int)hcon.getLength();
dis=hcon.openDataInputStream();
if(recvs>0){
rcv_bytes=new byte[(int)hcon.getLength()];
dis.readFully(rcv_bytes);
} else{……}
String sResponse=new String(rcv_bytes,0,recvs>0?recvs:k,"UTF-8");
if(sResponse.length()>0){
reader=new XmlReader(sResponse);
parse(reader,cmdType);}
……………}
2) 客户端应用程序向具体的Jabber服务器发送连接请求:
当客户端应用程序获得了与它相匹配的Jabber服务器的IP地址和端口号时,就可以向该Jabber服务器发送HTTP连接请求。具体的HTTP包的内容为:
GET /login-sid.xml?jid=9063@pica&pass=123456&version= HTTP/1.1
X-Online-Host: 219.235.1.137:4998
Content-Type: text/xml
User-Agent: Profile/MIDP-1.0 Configuration/CLDC-1.0
User-Agent: UNTRUSTED/1.0
Content-Length: 0
Host: 219.235.1.137:4998
3) 服务器端向客户端应用程序返回响应包:
服务器返回的HTTP包为:
HTTP/1.0 200 Ok
Content-type: text/xml
Content-length: 60
1973594324
返回来的这个包除了告诉客户端,服务器处理数据成功(OK),同时也返回了客户端与服务器端建立HTTP连接的标识sid,即1973594324。随后的客户端与服务器端进行通信就在这条做了标记的HTTP连接的基础上进行的。
此时的客户端的发包和收包的函数仍然是httpRequest(String page_path),只不过所不同的是此时与之相联系的服务器的IP地址变了。
3.2 与Jabber服务器建立HTTP连接进行通信
从上面可知,当客户端向Jabber服务器发送连接请求后,从服务器那里立即返回一个应答包,获得了这个HTTP连接的标识。这个标识是非常重要的,只有得到这个标识,才能说明客户端应用程序与Jabber服务器建立HTTP连接成功了,于是客户端应用程序就可以通过这个标识与服务器之间可以进行进一步的通信,如取好友列表、取聊天室、发送与接收短文本信息、查找在线好友、通过外部接口服务器与其它即时通信产品(如QQ)进行通信等一系列活动。
如: 客户端利用所获得的HTTP连接标识从Jaber服务器取好友列表情况
向Jabber服务器发送的数据包为:
HTTP包头:
POST /raw.xml?sid=1973594324 HTTP/1.1
X-Online-Host: 219.235.1.137:4998
Content-Type: text/xml
User-Agent: Profile/MIDP-1.0 Configuration/CLDC-1.0
Content-Length: 89
User-Agent: UNTRUSTED/1.0
Host: 219.235.1.137:4998
HTTP包体:
/jabber>
由于发送的数据包内容比较多用HTTP的POST方法来传送,分两块:一块是HTTP头,带有上面建立连接时所得到的HTTP会话标识sid=1973594324,向服务器请求获得raw.xml资源,同时还要指明服务器所在的IP地址和端口号等信息;另一块是HTTP包体,这个包体表示你要求的具体内容,上面这个包是要求取好友列表。当服务器接到这个包时,经过解析发现客户端要求取自己的好友列表,立即到数据库中去提取该用户的好友列表以Jabber XML协议的结构形式构造一个数据包发送给该客户端,客户端在收到这个数据包后,按照Jabber XML的协议结构的形式进行解析,把解析所得到的结果在用户的手机界面上显示出来,显示的情况见图2所示。一旦取好友列表成功后,就可以与好友进行聊天,传图片等各项活动了。
3客户端的显示效果
图2为客户端的显示效果。
4 结论
目前随着国内移动网络的逐步成熟,基于移动互联网的应用正在快速增长,不过应用比较多的主要是游戏和移动广告之类的,而应用到即时通信、移动定位、移动电子商务的还为数不多。基于移动互联网的即时通信处在信息、个性化与商务的交汇点,具有传统通信方式无法比拟的优势,用户既可以进行通信,也可以进行交友或从事各种商务活动。当然,如果能够把基于移动互联网的即时通信软件与各种多媒体技术结合起来,开发各种具有视频的通信系统,必将把我国移动互联网技术推到一个新的高度,这也是我们今后的研究方向。
参考文献:
[1] Dreamtech.即时消息传递系统编程源代码解析[M].北京:电子工业出版社,2002.