http网络服务器

2024-05-05

http网络服务器(精选五篇)

http网络服务器 篇1

1 Linux操作系统简介

对Linux的研究从20世纪60年代Multics项目的研究开始,它的前身是Unix,后来慢慢转化为现在的Linux系统,具有与Unix系统相似的程序接口和操作方式,在继承Unix系统的功能的同时,亦兼具了很多的优点,比如:支持多用户、多任务和多平台,安全性与稳定性较强,对于系统的漏洞可以实现快速的修补等,这些优点都是它发展的重要基础。与Windows系统不同,Linux主机上可以允许多人上线工作,资源分配很公平,比单人、假多任务系统稳定的多;它的支持者众多,有很多的个体和团队参与开发,可以保证信息的实时性和安全性。

另外,Linux系统与其他不同的是,由于Linux基于GPL架构,它公开的开放源代码,所以,任何人都可以免费的使用它,不像Unix那样需要负担巨额的版权费用,也不同于Windows需要不断的更新系统、并且缴纳大量费用,这也是它成为现代操作系统主流的主要原因。由于Linux使用很少的程序代码就可以实现一个完整的操作系统,因此相当适合作为家电或电子产品的操作系统,适合小核心程序的嵌入式系统,不管是现在还是未来,嵌入式领域将是Linux最大的发展空间。

Linux系统可以进行内核定制和剪裁,系统的角色也比较灵活,稳定性和成本上也颇具优势,在用户界面的选择上亦比较良好。它可以完成几乎所有的工作站或服务器的服务,如Web、Mail、Proxy、FTP等,功能强大而稳定。在Linux系统中,文件的适用性较强,文件属性可分为可读、可写、可执行来定义一个文件的适用性,这些属性可以分为三个种类,分别是文件拥有者、文件所属用户组、其他非拥有者与用户组,具有相当好的系统保密性。

2 http服务器的相关理论

2.1 TCP/IP协议

Transmission Control Protocol/Internet Protocol,中文简称传输控制协议/因特网互连协议,这个协议是因特网的成立的基础协议,它不单只是TCP和IP协议的合称,而是所有不同的网络协议的统称。TCP协议是针对传输层而建立,是面向连接的,并提供一种可靠的数据流服务,而IP协议是针对网络层建立的,是Internet最重要的协议。TCP/IP协议定义了在因特网中,数据传输的标准和电子设备进入的方法,这个协议采用四层传输结构,分别为网络访问层、互联网层、传输层和应用层,由上一层发出信息,之后,下一层对发出的信息作出适当正确的处理后传递,即是由下一层为上一层提供服务,当TCP发现问题时,会要求重新传输,而IP则给设备规定一个固定的IP地址,每个主机都有一个唯一的地址,是一个32位的二进制数字,因此这个协议保证了网络传输过程中的正确性和规范性。

2.2 HTTP协议分析

HTTP(Hyper Text Transfer Protocol)即是指超文本传输协议,应用于分布式、合作式和多媒体信息系统的应用层协议,它是客户端和服务器端请求和应答的标准,客户终端箱服务器端发送一个指定端口的http请求,客户端监听的同时,服务器端接收信息,并做出处理。http传递的信息有命令类和传输类,可以用于web访问和其他各类信息的传输,实现了超文本信息的传递,同时保证了信息传输的高效性和安全性。

一般说来,http的工作过程是独立的方式,分为四个阶段,首先由客户端和服务端建立连接,然后客户端向服务端发送信息的请求,由服务器接收并做出回应,客户端把回应的信息显示在屏上并断开连接。这是一个完整的工作过程,如果信息在传递的过程中出现了任何的问题,信息将重新返回到客户终端。

HTTP协议的诸多优点使得它的应用极为广泛,在Internet中占据主导地位。用户双方要通信,就必须遵守这个协议,就目前而言,我们经常访问的那些网站大都是采用这个协议的。

3 Linux的http网络服务器的实现功能

Linux内核本身携带了很多的设备驱动程序,这些可执行程序可以被内核动态加载和卸载,差不多可以驱动目前主流的各种硬件设备,它的应用极大的提高了现代网络的成本和运行效率。http服务器的主服务功能提供端口绑定、服务侦听、客户端套接字维护和业务线程创建等,这种服务器可以多方面的提高网络服务器的功能。http服务器技术是控制网络中的一个很重要的技术,与Linux操作系统结合后,更多的应用于因特网的远程实时控制中。Linux的内部的强大核心驱动能力,起了关键作用。服务器接收到远方发来的控制操作请求后,会发出命令信息使监控系统执行。而且,这样的网络服务器可以实时的刷新状态信息,接收端可以通过网络实时的访问这些状态,并作出合适的调整应对方法,因此,体现出了人性化的方面。

4 总结

高性能的网络服务器在Linux环境下的应用越来越广泛,Linux的http网络服务器性能强大、稳定,在现代化的操作系统中应用广泛,比如在机器人的设计中,它可以实现远程对机器人的操控,更大程度的促进了人类各技术领域的探索。我们应该在深入的了解这种服务器之后,扩大对它的应用增强对它的支持。每种技术在展现优势的同时,不免存在着一些缺点,Linux的http网络服务器也是这样,相信经过大家的不断努力,不久的将来,这些问题也会被解决。

摘要:随着通信技术的快速发展,网络现在已经遍及世界的每个角落,与人们的生活紧密相关。从一个国家的信息领域的发展来说,操作系统的信息安全程度往往是它的代表,它对技术、开发难度的要求是需要不断的改革的。Linux操作系统凭借自身安全、稳定、高效的特点,在服务器领域占据着重要的地位。不论是硬件上的配备还是应用驱动的程序,Linux的http网络服务器都可以提供出相比于其他的操作系统颇具优势的功能,本文也将从Linux操作系统、http服务器以及它的功能方面来简要的探讨。

关键词:Linux,http网络服务器

参考文献

[1]邵芬.于国防.张宁.基于多线程的http服务器的设计与实现[J].工矿自动化,2007(08):134-136.

[2]王学龙.嵌入式Linux系统设计和应用[M].北京;清华大学出版社,2001.

http网络服务器 篇2

1 安卓端

1.1 安卓端的上传

首先是请求方式的选择。众所周知, HTTP的请求方法有GET、POST、HEAD、PUT、DELETE、TRACE和OPTIONS几种, 其中用的较为广泛的有GET和POST两种。相对而言, 我更加推荐使用POST方法。原因是GET方法的请求中只包含request-line部分, 它将数据直接添加在URI中, 这样的话一些重要且私密的数据就会暴露在地址栏里。而POST则可以通过添加request-body, 将数据放进body里再进行传送, 这样不会出现数据暴露的安全隐患。因此相较于GET方法, POST的传输数据量更大, 安全性也更高。

要注意的是, 使用POST方式看不到传送的数据不是因为POST方式自身的处理, 而是因为浏览器做了相应的处理和限制, 因此使数据不会被明显暴露在浏览器界面上。但是只要利用一些工具还是可以查找到数据的。所以从这个角度讲, GET和POST都是不安全的。但是相对而言, GET是把数据直接显示在地址栏里, 而POST则要隐秘许多。因此POST相对GET确实比较安全。

在安卓客户端要使用Http Client首先要创建一个它的实例。由于安卓自带有Http Client, 所以可以直接调用系统应用程序编程接口来创建。此后需要创建请求方式的实例。

Http Post post=new Http Post (URL) ;

注意, 这里的URL是请求的地址, 务必要填写, 不然的话在执行POST方法时会报一个Null Pointer的空指针错误。由于文章中的服务器采用的是Struts2+Hibernate框架, 因此URL的基本格式是:

http://服务器ip地址/项目名/action名称.action

如果需要传送一些数据, 在这里可以用刚才说到的向request-body添加数据的方式来传送。Http Client的结构如图1所示。

由图1可以看到, 我们关注的各种HTTP方法都被定义成一个个独立的类, 而他们都继承自Http Request Base。其中比较特殊一点的是Http Put和Http Post, 可以看出只有他们都是继承自Http Entity Enclosing Request Base这个抽象类。这是因为它们需要设置request-body, 即请求实体。而Http Entity Enclosing Request Base里有Http Entity的成员变量。Http Entity是一个接口, 程序员可以根据具体项目中需要传递的数据类型选择Byte Array Entity、String Entity、Inputream Entity、File Entity等等类。他们均实现了Http Entity这个接口。除此之外Http Client还提供了Url Encoded Form Entity类和Multipart Entity类来满足更多的需求。

在此, 笔者介绍一种通过模拟超文本标记语言HTML (Hyper Text Mark-up Language) 的表单来传送P O S T请求里参数的方法。而用到的工具则是Url Encoded Form Entity这个类。

首先创建一个List的实例:

List<Name Value Pair>params=new Array List<Name Value Pair> () ;

这里的Name Value Pair是用于关联某一名称与某一值的专门类。

第二步就可以向实例params里添加需要传送的数据了。使用的是params的add方法:add (param1, String1) 。

这里有两个参数。实际上就相当于Map里的键值对的概念。而这里的第二个参数必须是字符串格式。

再将添加完数据后的List实例params加入POST的body里。如果数据中有汉字, 必须设置POST的编码格式:

post.set Entity (new Url Encoded Form Entity (param s, "UTF-8") ) ;

之后可以执行请求并且读取Response:

Http Res p o n se res p o n se=clie nt.execute (post) ;

最后可用release Connection释放连接。

如果需要上传图片、音频等文件, 也可以使用这种模拟表单的方法。可以使用刚刚提到的在Http Client程序包中另一个类Multipart Entity。它同样实现了Http Entity接口。但由于该类使用起来并不是最方便, 并且已经介绍过表单模拟的相关方法了。是这里介绍一种更为简单的方法, 即使用File Entity类来实现。只需要实例化File Entity

File Entity entity=new File Entity (file, "binary/octet-stream") ;

再同样用set Entity方法后就可以执行了。

1.2 安卓端的接受

上一节讲到接受服务器的响应可以实例Http Response来实现:

Http Response response=client.execute (post) ;

然后可以用if语句来判断Response的情况:

if (re.get Status Line () .get Status Code () ==Http Status.SC_OK)

这里的Http Status.SC_OK即200, 代表整个传送顺利进行。

接下来对服务器传递过来的数据进行解析。

首先要获取承载数据的实体:

Http Entity entity=response.get Entity () ;

判断entity是否为空, 如果非空则从里面获取其实际的数据。

这里需要用到Entity Utils这个类。它是一个工具类, 是为Http Entity对象提供的静态帮助类。利用它可以快速获取服务器传递的数据:

String out=Entity Utils.to String (n, "UTF-8") ;

如果是图片、音频等转换而成的byte数组, 则可以用如下方法直接得到byte数组:

byte[]by=Entity Utils.to Byte Array (en) ;

另外, 如果服务器的数据是通过JSON (Java Script Object Notation) 包装过的, 则还需将字符串out转换为JSON对象:

JSONObject json=new JSONObject (out) ;

最后就可以从json实例里直接得到服务器反馈的数据了, 如:

int result1=json Object1.get Int ("result1") ;

Sring result2=json Object1.get String ("result2") ;

在此对JSON进行简单介绍。

JSON是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Java Script Programming Language, Standard ECMA-262 3rd Edition-December 1999的一个子集。JSON采用完全独立于语言的文本格式, 但是也使用了类似于C语言家族的习惯 (包括C, C++, C#, Java, Java Script, Perl, Python等) 。这些特性使JSON成为理想的数据交换语言。由于JSON的数据格式非常简单, 我们可以用JSON传输一个简单的String、Integer、Boolean、也可以传输一个数组或者一个复杂的Object对象[3]。

2 服务器端

2.1 服务器的接受

服务器用的是Struts2+Hibernate框架。其中Struts框架是整个系统应用框架的基础, 它实现了各个模块的低耦合, 使用Hibernate框架只考虑持久层应用。所谓的持久层就是由DAO (Data Access Object) 组件构成, 简单说就是屏蔽了与数据库打交道的细节, 只需调用DAO接口中的方法就可以对后台数据操作[4]。用户通过表示层向服务器发送应用请求, Struts框架的主要功能就是拦截用户的操作请求, 解析用户请求的对象, 并把请求转发到相应的Action类处理, 在Action类中, 调用相应的持久层再把操作结果返回前端表示层显示。在持久层, Hibernate主要责任就是负责实体对象与数据库之间的交互映射, 使得我们只需通过操作DAO层的实体对象就可以操作数据库, 获得我们想要的数据, 再经过业务逻辑层、表示层最终返回给表示层, 展示给用户使用。因此它接受客户端传来的数据十分简单。按照Struts的规则, 在Action类里面写对应的方法即可[5]。

这里需要注意的有4点。

(1) 在struts.xml里配置action时, package里的extends一定要写成extends="json-default"。同时result里的type要写成type="json"。这样就可以通过JSON来传递数据了。

(2) 而Action类需要实现Servlet Request Aware和Servlet Response Aware这两个接口, 这样就可以得到Request和Response的实例了。

(3) 所有的Action类都要抛出IOException。

(4) Action类的成员变量要有getter () 和setter () 方法[6]。

接下来只需要根据传递数据的格式来取数据:

request.get Parameter ("name") ;

request.get Input Stream;

这里的"name"是Name Value Pair里Value所对应的Name。而Input Stream则适用于图片等文件的读取。

2.2 服务器的响应

与接收数据一样, 也是在Action类里写对应的方法, 再在struts.xml里配置。

要通过JSON传递数据先要创建JSONObject的实例:

JSONObject json Object=new JSONObject () ;

如果是传递多组数据, 在此可以使用在JSONArray里面添加JSONObject的方法:

JSONArray json Array=new JSONArray () ;

之后向json Object里添加需要反馈给客户端的数据:

json Object.put ("result", result) ;

这里也要注意如果数据包含中文字符, 则需要设置Response的编码格式:r e s p o n s e.set Character Encoding ("utf-8") ;r e s p o n s e.set Content Type ("text/html;charset=utf-8") ;

最后将json Object转换为String, 利用Response的Writer把数据发送出去:

response.get Writer () .w rite (json Object.to String () ) ;

对于发送图片, 可以将服务器上待发送的文件通过文件输出流和字节数组流转换为字节数组。之后获取Response的Output Stream的实例, 就可以由该实例的write方法将字节数组发送出去[7]。基本流程可参考一下代码片段:

3 实际案例

3.1 开发环境

3.1.1 安卓端

操作系统:MOKEE-Android 4.4.4

手机型号:Sony L36H

开发环境:Eclipse Ver 4.2.0

3.1.2 PC

操作系统:Windows 7旗舰版64位

3.1.3 服务器:apache-tomcat-7.0.57

集成环境:My Eclipse Ver 4.3.0

3.1.4 工程名:SSHTest

3.2 具体实施

该案例是对文章所讲述的方法做一次实际的操作来进行验证。因此分别实现文字的上传与下载和图片的上传与下载四个功能。界面布局如图2所示。

需要上传的图片和文字打开应用时就直接显示在界面上。

3.2.1 安卓端的上传和服务器的接受

安卓端:

在进入正题之前, 有两点需要注意。首先要在Android Manifest.xml文件里添加INTERNET权限。不添加这个用户权限, 该应用无法进行网络访问。但这往往是最容易忘记的一步。

第二点, 在Android 4.0以上的版本, 只能由主线程更改界面, 而访问网络只能在子线程进行。所以这里可以用异步类Async Task和Handler机制。

接下来直接进入正题。

首先找到图片文件的路径, 如果文件是储存在SD卡里的话, 还需要在Android Manifest.xml里添加WRITE_EXTERNAL_STORAGE权限。随后将文件添加到File Entity里。之后创建Http Client和Http Post的实例并且执行。

代码:

这一句里的"mystring"是相对应的。该值由程序员自定义。

在接受完数据后, 将图片储存在电脑的硬盘里, 我选择的路径是D盘的From Android文件夹。再将字符串打印到控制台显示出来。

如果程序顺利执行, 安卓端收到Http Response的Status Code将会等于200。此时执行一个Toast提示用户上传成功, 如图3所示。反之, 如果Status Code不等于200, 则说明执行过程存在错误。那么也执行Toast提醒上传失败, 请重新上传!此后可以查看Eclipse的Log Cat和My Eclipse的Console来确认哪一步出错。

3.2.2 安卓端的下载和服务器的响应

安卓端的请求:

由于下载过程中安卓端无需向服务器发送数据, 因此只需要简单地请求服务器中响应的Action就可以了。不用再添加request-body。

服务器的响应:

当服务器接受到安卓发出的请求后, 与URL相对应的Action就开始工作, 如图4所示。

安卓端的接受主要就是从Http Response里获取响应实体:

随后只需把获取的数据装入Message中, 并用Handler发送给主线程, 就可以显示在界面上了, 如图5所示。

4 结语

文章对安卓与服务器之间交互的具体方法做了相应的介绍。采用的通讯方式是HTTP。它采用了请求/响应模型。安卓端向服务器发送的请求包含了:请求的方法、URL、协议版本和客户信息等等。而服务器势必要有一个反馈。如果安卓端的请求内容中包括对服务器内客户资料、服务器文件或其他数据的请求, 那么服务器在响应的同时还需要将这些数据一并传送到安卓端。因此文章就上传和下载这两个生活中最常见的动作为主, 分别从安卓端和服务器端介绍了它们之间通讯的具体过程。

而在具体方法的选择中, 文章是本着简单实用多样的原则进行介绍的。在传输方式上选择了更为安全和更具传输量的POST方法。传送字符串数据用的是模拟HTML表单的Name Value Pair列表方式。类似键值对的输入过程一目了然。需要关心的只有字符编码的统一设置, 规避乱码的问题。而对于图片的传送则用到了继承Http Entity接口的File Entity。它是专门用于传送文件的类, 只需在创建其实例时将文件放入, 再设置文件的格式就可以方便地传送该文件到服务器;而对于下载字符串数据, 则用了轻量级的数据交换格式JSON。下载图片则是将文件转换为字节数组再进行传输。

最后的实例分析也验证了以上方法切实可行。希望能让读者对于安卓与服务器之间的通讯交互的细节有更多的实际认识。

参考文献

[1]洪亮, 田支斌.浅析中文环境下的Apach Commons Http Client编程, 电脑知识与技术[M], 2008 (22) :782.

[2]郑阿奇, 俞琰.Java EE项目开发教程 (第2版) [M].北京:电子工业出版社, 2013.

[3]姜雷.基于JAVA技术的实验室管理系统的设计与实现[C].北京:中国电子科技大学, 2012.

[4]史胜辉, 王春明, 陆培军.Java EE轻量级框架Strut2+Spring+Hibernate整合开发[M], 北京:清华大学出版社, 2014.

http网络服务器 篇3

伴随着现代通信技术、网络技术的发展,基于TCP/IP通信协议的Web技术得到了迅速的普及和广泛的应用。Web技术可使用户在任意地点通过Web浏览器接入网络,访问Web Server发布的各类信息,实现世界范围内的互联和互通。嵌入式Web Server技术是指将Web Server引入到现场测试和设备控制中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备发展成为以TCP/IP为底层通信协议、Web技术为核心的基于互联网的网络测试和控制设备。内嵌于设备的Web Server可以向任何接入其所在网络的合法用户提供统一的基于浏览器方式的操作和控制页面,浏览器成了设备的前端控制板。因此,嵌入式Web Server技术得以推广,其应用可见于各种领域。

1 总体设计方案

1.1 系统硬件设计方案

与Internet连接有很多种方式,常见的接入方式有以太网接入、ADSL接入、电话拨号接入等。其中的以太网接入方式,因其所具有的廉价、高效的特点,已经获得了高度关注和大量使用,本文即重点介绍了以太网的接入方式[1]。

运用以太网接口技术实现远程控制的基本工作过程为:远程微型计算机经过Internet传输数据包到达本地[1],以太网控制芯片ENC28J60将接收到的数据包进行地址解析,然后交给PIC24FJ256GA106微控制器,PIC24FJ256GA-106执行TCP/IP协议模块,去掉TCP/IP报头,得到有用的数据,从而实现嵌入式设备的互联网远程控制。系统硬件总体框图如图1所示。

1.2 系统软件设计方案

系统软件设计部分主要包括以下三个模块:

(1)ENC28J60驱动模块。用于实现PIC单片机对以太网控制芯片的驱动、控制过程。

(2)将TCP/IP协议栈嵌入PIC24FJ256GA106微控制器内部模块。该模块是系统实现的关键,主要包括了IP地址与以太网地址之间的转换协议ARP,出错报告系统协议ICMP,数据报文传送协议IP。另外还包括了数据可靠连接协议TCP和检索信息的传输协议HTTP的设计与实现[1]。

(3)动态网页的设计模块。可以实现数据传送时的双向交互机制,达到远程控制目的。

2 软件设计

2.1 开发工具

软件设计中的首要任务是确定开发语言。MPLAB集成开发环境(IDE)用于代码的创建和编辑,同时可以汇编、编译和链接源代码,用MPLAB ICD2器件编程器烧写固件。

2.2 TCP/IP协议栈的实现

TCP协议是实现数据可靠连接的保证。本系统中,用户数据的传送主要是由TCP连接实现的,所以TCP是确保该系统实现的关键。TCP是一个面向连接的协议。当其中一方向另一方发送数据的时候,需要在两者之间建立一条新的连接,通话完成后再断开连接。建立TCP连接时,需要用到三次交互机制。通话完成后,即需要断开TCP连接,而这个过程则需要四次交互机制。协议处理流程如图2所示。

2.3 HTTP协议及其实现

2.3.1 HTTP协议的请求报文和响应报文

请求报文包括一个请求行、一个首部以及某些时候可能会出现的一个主体,请求行定义请求类型、资源(URL)和HTTP版本。根据请求类型可将请求报文划分为几种模式,这些模式是客户向服务器发出的真正命令或请求。

通常,请求消息的第一行可表示为如下格式:

Method Request-URI HTTP-Version CRLF

通常,响应消息的第一行可表示为如下格式:

HTTP-Version Status-Code Reason-Phrase CRLF

2.3.2 HTTP处理流程

首先,要进行HTTP初始化,即将各个HTTP连接置于监听状态,并且初始化各个HTTP状态机。进入监听状态后,监听各个HTTP连接,发现新的连接时,即进入HTTP-Process,从缓存中提取客户端的请求行状态信息和头信息,并根据这些信息执行相应的处理程序,对客户端的请求信息做出响应,请求正确时,发送被请求数据内容;若没有新的HTTP连接请求则继续监听。在向客户端发送响应消息和数据没有成功时,需要发送与其相应的响应消息。若发送数据完成请求时,关闭当前HTTP连接,并且再经过初始化之后,进入监听状态。

3 系统运行及性能测试

测试的软硬件环境包括写入程序的Web系统开发板、测试用的带网卡及网线的PC机。

测试的软件环境主要包括程序的编译烧写,在成功地加载TCP/IP协议的基础上,为了使嵌入式服务器具有Web功能,需要在上层应用程序中实现HTTP协议。

测试方法是借助于PC机内的世界之窗浏览器,以及抓包软件Packetyzer。

测试过程及结果为:

(1)测试前先将本地连接的TCP/IP协议属性设置为静态IP。

(2)启动Web Server系统,并用一根网线与一台PC机连接。利用MPFS2将编写好的网页上传至单片机的扩展EEPROM内。

(3)网页上传成功后,打开浏览器,同时打开抓包工具。在地址栏中输入嵌入式Web服务器的IP地址:192.168.1.99,点击进入网页。

对上述过程进行抓包,PC机向嵌入式Web服务器发送HTTP请求包。嵌入式Web服务器收到请求报文后,执行HTTP处理程序,发回HTTP响应。HTTP连接成功后,嵌入式Web服务器向PC发送真正的HTTP数据包。

HTTP是基于TCP协议的,图3为TCP通讯过程,可以看到,先要经过3次握手机制,才能建立TCP连接。

发送数据完成后,需要关闭TCP连接,这个过程需要4次握手。撤销连接过程如图4所示。

以上测试表明了HTTP基本功能的实现,下面需要更进一步地对系统加以测试。点击超链接进入网络设置,修改嵌入式Web服务器的IP地址为192.168.1.100,点击保存。再次连接到192.168.1.99,会发现无法登录到有关页面。在浏览器中输入新的IP地址:192.168.1.100,连接成功,页面正常显示,网络设置可行。

4 结束语

实验室运行结果表明了基于单片机以太网嵌入式Web Server的设计方法的有效性,验证了传输功能的可靠性和稳定性、Web页面的实现等等,对系统实现的基本理论和基本方法进行了有益的探索和尝试。本课题主要完成了以下工作:

(1)完成了硬件平台设计和调试。(2)实现了软件设计和调试。

(3)实现了客户端与服务器的交互过程。

参考文献

[1]王良.基于8位MCU的嵌入式Web服务器研究[D].武汉:武汉理工大学硕士论文,2007:5-6.

[2]刘化君.计算机网络原理与技术[M].北京:电子工业出版社,2005:132-145.

[3]任守奎,等译.TCP/IP详解[M].北京:北京大学出版社,1999:55-79.

[4]何轩,等.基于以太网的嵌入式Web服务器的设计与实现[J].微电子学与计算机,2005:142-145.

一种基于HTTP的网络蜘蛛实现 篇4

1.1 基本概念

HTTP协议,即超文本传送协议(HTTP-Hypertext transfe protocol),定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向(transaction-oriented应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

1.2 特点

HTTP协议的主要特点可概括如下:

(1)支持客户/服务器模式。

(2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

(3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

(4)HTTP 1.1使用持续连接:不必为每个Web对象创建一个新的连接,一个连接可以传送多个对象。

(5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

1.3 请求类型

HEAD-向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就获取包含在响应消息头中的元信息。

GET-向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web App.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

POST-向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT-向指定资源位置上传其最新内容。

DELETE-请求服务器删除Request-URI所标识的资源。

客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有的响应都有实体内容。

2 网络蜘蛛

2.1 基本概念

网络爬虫又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。

2.2 工作原理和关键技术

网络爬虫从一个或若干初始网页开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统设定的停止条件。所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。

(1)对抓取目标的描述或定义;

对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。

(2)对网页或数据的分析与过滤;

通常需要用到html解析或正则分析技术。

(3)对URL的搜索策略。

网页的抓取策略可以分为深度优先、广度优先和最佳优先3种。深度优先在很多情况下会导致爬虫的陷入(trapped问题,目前常见的是广度优先和最佳优先方法。

3 Python实现网络蜘蛛实例

Python中实现网络蜘蛛需要用到两个关键技术:http访问及正则表达式。

3.1 HTTP访问

安装httplib2包,访问程序如下:

3.2 正则抽取网页中的所有url

3.3 完整例子如下

4 结结

http网络服务器 篇5

随着信息时代的到来,计算机技术与网络迅猛发展,科学技术的触角延伸到世界上的每一个角落,教育也在进行着一次新的飞跃。各国的网络远程教学开始迅猛发展,尤其是在科技知识呈几何级指数增长的学习型社会背景下,网络教学越来越受到人们的重视。

基于多媒体视频的网络教学方式,具有图文并茂、形象生动等特性,一直在网络教学中发挥着重要作用。而传统的网络教学中采用的RMVB、MPEG等视频格式的流媒体,存在视频清晰度不高、文件体积过大、下载传输速度慢、版权保护不周等问题。随着客户量逐渐增多,服务器的访问量过大,会加重服务器的负担,造成服务质量下降而影响教学效果。

FLV是Flash Video的简称,是近年来一种新兴的流媒体视频格式,具有视频清晰、文件体积小、下载速度快、服务器占用率低等特点,可以节约大量的硬件和管理成本,还可以节省用户等待下载视频时间。清晰的1分钟FLV视频文件大小在1MB左右,一部45分钟的FLV教学视频只有45MB左右,是普通流媒体视频文件体积的1/3。再加上CPU占有率低、视频质量良好等特点使其在网络上盛行。目前You Tube、新浪播客、六间房、56、优酷、土豆网等著名视频共享网站均采用FLV格式文件提供视频。

因此使用FLV流媒体技术来解决网络视频教学中的服务器瓶颈问题,提供高质量的视频教学内容,成为国内外很多研究人员关注的新问题。

在互联网上,提供FLV流媒体服务,主要有两种方式:基于RTMP协议和HTTP协议,由于基于HTTP协议的FLV流媒体服务具有综合成本低、服务器压力小等特点,所以在远程网络视频教学系统广泛应用。

本文就提出一种基于HTTP协议的FLV流媒体技术的网络视频教学系统的设计原型,重点分析其中的技术难点,并给出相应的解决方案。

2. 系统设计

FLV流媒体技术在网络视频教学中的应用,关键在于开发一套FLV流媒体的格式转换、视频上传、内容分发、媒体播放等功能于一体的网络视频教学管理信息系统。根据系统的使用权限,网络视频教学系统中的角色可以分为:教师、学生和管理员。系统的基本流程是:老师上传各种格式的教学视频,网站后台自动转换成FLV格式并进行截图。学生通过FLV视频列表界面,搜索相关的教学内容,点播教学视频进行学习。学生还可以对视频内容进行评论或者发出疑问留言,教师对留言和疑问进行解答。管理员负责管理系统所有用户和维护基础数据。系统的基本流程图如图1所示

本网络视频教学系统采用ASP.NET 3.5+SQL Server2008开发完成,用到的第三方控件还包括FLV流媒体编码转换工具:ffmpeg和mencoder。

3. 技术难点和解决方案

FLV流媒体技术在网络视频教学中的应用的技术难点,包括视频的上传和自动格式转换,内容管理和媒体转换。

3.1 视频的上传和格式自动转换。

在实际教学应用,采用的是各种格式的教学视频,例如avi、asf、mpg、rmvb等格式。这些视频在上传的时候,需要自动地在系统的后台转换成FLV流媒体格式,同时截取一章屏幕录像作为这个视频的封面图片,再在数据库中添加一条视频的记录。解决方法是:第一步、先利用ASP.NET 3.5的File Upload控件实现视频的上传;第二步、视频上传到服务器之后,利用ASP.NET 3.5的线程功能,启动一个新的线程,调用FLV编码转换工具ffmpeg或者mencoder在后台自动地对视频进行转换。上传的视频如果是asf、avi、mpg、3gp、mov等格式,则调用ffmpeg控件进行格式转换;如果是wmv、rm、rmvb等格式则调用mencoder控件进行格式转换。在视频格式转换的同时,截取视频在指定秒数的图像作为视频的封面图片保存在服务器指定位置。第三步、在格式转换完成后,往数据库中的视频表中插入一条数据,记录视频的名称、路径、分类、标签等信息。

核心代码如下所示:

3.2 内容管理和社会化标签Tag。

随着教学视频的日积月累,如何在海量的视频中实现高效的搜索和查找,如何管理和组织视频文件,也是视频教学系统需要重点考虑的问题。视频和图片一样,在硬盘中都是以二进制的数据存储,而且数据庞大,对二进制数据进行搜索没有大多意义。我们提出的解决方法不是直接在搜索视频文件的二进制文件,而是搜索与此视频相关的文字描述信息,例如视频标题、视频的Tag标签等,通过待搜索项与描述文字的匹配程度来实现视频的搜索。社会化标签Tag是一种准确、灵活、开放、有趣的分类方式,是由用户为文章、图片、音频、视频等一系列文件所定义的一个或多个描述。视频和标签的关系如图2所示:

按照视频上传的年和月以文件夹的形式来组织视频,再在数据库的视频表中,记录每个视频文件的名称、路径、分类、标签和描述信息。这样就可以通过搜索视频的社会化标签以及相关描述信息来实现最终的视频搜索。

3.3 媒体播放。

播放FLV流媒体,客户端需要安装FLASH插件的浏览器。由于FLASH的广泛使用,几乎所有的浏览器包括IE、Chrome、Firefo等安装了FLASH插件。利用FLV播放器flvplayer,播放已经转换成FLV格式的视频。播放视频由v_show.aspx页面完成,播放器接收FLV视频的地址即可,核心代码如下所示:

4. 总结与展望

基于流媒体技术的网络远程教学是对传统教育模式的一次革命。它能够集教学和管理于一体,突破了传统教学中“面授”的局限,为学习者在空间和时间上都提供了便利。与采用其它媒体进行教学的多媒体教学方法相比,流媒体技术在网络远程教学上具有突出的优势,如可以在Internet上实现教学课件的点播(VOD)、实时授课、在线交互等。流媒体技术已成为影响网络远程教学的重要技术,而基于HTTP协议的FLV流媒体技术,具有视频清晰、文件体积小、下载速度快、服务器占用率低等特点,这将极大提高网络教学资源的传输利用效率,降低网络远程成本,从而推动现代网络远程教学技术平台的改革与发展。

参考文献

[1]黄立新.视频教学型网络课程的设计与开发[J].中国电化教育,2004.

[2]陈冠军编著.精通ASP.NET2.0典型模块设计与实现[M].北京:人民邮电出版社,2007:233-243.

[3]黄海,林超编著.ASP.NET2.0全程指南[M].北京:电子工业出版社,2008:490-572.

[4]张强华.流媒体及其在网络教学中的应用[D].浙江万里学院,2004

[5]段玉春,孙玉强.《C++程序设计》网络课程的设计与开发[J].南阳师范学院学报(自然科学版),2004

[6]楚展奇.构建基于流媒体的远程教育平台[D].河南科技大学,2009

[7]王颖.基于流媒体的远程教育系统[D].辽宁大学广播影视学院,2005

上一篇:骨骼动画下一篇:思维品质