设计正文模板双面打印.docx
- 文档编号:30126934
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:32
- 大小:393.31KB
设计正文模板双面打印.docx
《设计正文模板双面打印.docx》由会员分享,可在线阅读,更多相关《设计正文模板双面打印.docx(32页珍藏版)》请在冰豆网上搜索。
设计正文模板双面打印
摘要
搜索引擎(SearchEngine)是一个对互联网上的信息资源进行搜集整理的应用软件系统。
它主要包括信息搜集、索引建立和信息检索三个部分。
搜索引擎有很多类型,常见的有FTP搜索引擎和WEB搜索引擎。
一般WEB搜索引擎较少处理FTP服务器上的数据。
就信息规模而言,FTP服务器的信息量比WEB服务器小很多。
因此FTP搜索引擎硬件投入和维护的费用也远远低于大型通用搜索引擎。
本文针对在FTP服务器的搜索速度和效率问题,对现有FTP搜索引擎技术进行了分析和研究,重点详细介绍了爬虫模块和索引模块的设计与实现。
文章首先分析了FTP搜索引擎研究的背景和意义。
然后在第3章节和第4章节中详细描述了关键的爬虫技术和索引技术,包括:
如何进行网段扫描,获取数据以及建立索引数据库等。
最后本文还分析了在爬虫和索引实现时遇到的困难并提出了相应的解决方案。
【关键词】FTP搜索引擎网络爬虫索引
Abstract
SearchEngine(SE)isanapplicationsystemforinformationcollectingandclassifyingontheInternet.SEconsistsof3modules:
informationcollecting,indexbuildingandinformationretrievingmodule.ThereareseveralkindsofSE,theWEBSEandFTPSEarefavoritetoolsamongthemforendusers.Usually,mostWEBSEsdonotworkwellonFTPsites.Asfarastheinformationscaleonservers,theFTPserversareextraordinarysmallthanthewebservers.ThusthecostofinvestmentandmaintenanceonhardwareisfarlessthantheWEBsearchengines.
AimingattheissuesonsearchingefficiencyandsearchingrateofFTPsearchengines,thethesisanalyzestheexistingtechnologies,andthendescribestheimplementationofspidermoduleandindexmoduleindetail.
ThethesisanalyzesthebackgroundandsignificanceofFTPsearchenginesatfirst.Then,thekeytechniquesonspiderandindexaredetaileddiscussedinthe3rdand4thchapter.Itincludeshowtoscantheappointednetwork-zone,howtoextractthefileinformationfromthebinarydata-stream,aswellashowtobuildtheindexdatabase.Besidesanalyzesthedifficultieswhilescanningandindex-building,thethesispresentssomefeasiblesolutionsatlast.
【KeyWords】FTPSearchEngineWebSpiderIndex
前言
随着网络的发展,尤其是互联网的全球普及,使互联网上的信息急剧增长,很多个人和企业用户都建立对外开放的FTP服务器,提供了大量的信息供网民下载。
如何从这信息的海洋中找到符合用户要求的有用信息,成为一个迫切需要解决的问题。
对互联网上各个FTP站点上的资源进行整合汇总,以便快速、准确的了解到各个站点所提供的信息,显得十分必要。
在各个FTP站点上的信息源有种类繁多,比如文本、图像、视频和声频文件等等。
本设计针对FTP站点提供的信息资源进行爬取和分类,为后期建立索引的方便,对每个站点建立了一个经过初步处理的原始数据文件。
本系统主要是完成了对FTP站点信息的提取和分类,依据用户提供的站点列表、站点扫描范围以及扫描端口号进行扫描。
其中对于爬虫模块来说最重要的两个步骤就是FTP站点信息的获取和对数据源的格式组织。
1FTP搜索引擎爬虫模块介绍
1.1设计思路
任何FTP站点的建立都符合文件传输协议(FileTransferProtocol,FTP),由于FTP协议任务是从一台计算机将文件传输到另外一台计算机,它与这两台计算机所处的位置、连接方式、甚至是否使用相同的操作系统都没有关系。
在使用FTP协议对话时,我们都可以使用FTP命令来传输文件。
虽然在每种FTP服务器上支持的FTP命令有一些细微的差别,但它们所使用的基本命令结构是相同的,对于标准FTP命令也都支持。
因此通过FTP命令获取FTP站点数据应该可行,而且拥有较好的兼容特性。
本设计为FTP搜索引擎爬虫模块,所需要获取的数据有资源名称、类型、大小和最后修改时间。
可以使用FTP服务器提供的标准命令满足此次设计的需求。
1.2设计步骤
1.2.1扫描站点
按照用户的设置,从众多潜在可访问站点中找出可访问的FTP站点。
1.2.2获取数据
利用FTP命令获取该FTP站点下的文件和目录,并分别记录各个目录下的文件和子目录。
1.2.3数据分类
读取分类号。
按照数据类型的编号列表,对不同类型的文件数据标号。
以便对数据进行分类。
1.2.4生成源文件
利用步骤(1.2.2)和(1.2.3)中获取的数据建立完整的数据源,并且按约定协议存在指定的目录下。
1.2.5生成站点列表
将可访问的站点存入站点列表中,便于下次扫描使用。
1.2.6建立索引文件
利用源文件建立索引数据库,方便数据的检索操作。
2FTP搜索引擎概要设计
2.1工作原理
用户对在完成对FTP搜索引擎的爬虫模块配置文件的配置,便可执行爬虫程序。
FTP搜索引擎的工作模式大概如下:
1)爬虫程序会自动生成用户指定IP网段中包含的所有IP地址,对它们逐一进行扫描,已确认哪些站点提供了匿名的FTP服务。
2)当程序成功登录某个FTP站点之后,程序会自动获取其各级目录下的文件和目录列表,并且会获取各个文件的大小、最后修改时间,最后程序会根据对照表对获取的各个文件进行分类。
3)在所有操作完成之后,会生成该站点的目录和源文件。
在扫描完用户配置的站点之后,扫描成功的站点会写入一个站点列表的文件,以便以后使用。
在索引模块中,会根据爬虫模块获取的数据,进行处理,建立索引数据库。
图21搜索引擎系统工作图
2.2工作流程图
图22FTP搜索引擎工作流程图
3FTP搜索引爬虫模块擎详细设计
3.1设计目的
如今很多企业和个人都建立了自己的FTP站点,在各个FTP站点中包含有大量的资源,如何才能快速的在浩如烟海的资源中找到自己需要的资源,已经成为一个需要我们不得不解决的难题。
要解决这一问题,需要我们建立一个有效的FTP搜索引擎,而实现搜索引擎的第一个问题就是如何获取各个站点提供的资源信息。
本次设计的题目为FTP搜索引擎爬虫模块,其用途就是搜集各个FTP站点的数据信息,并且组织成一个特定的数据格式,索引模块得去这组数据之后,利用再次处理这些数据,建立索引数据库。
3.2功能模块设计
3.2.1网段扫描
3.2.1.1设计思路
经过查阅资料,由于FTP搜索引擎与WWW搜索引擎最大的区别就在于FTP站点内没有与WWW页面相对应的超链接,因而FTP搜索引擎的站点获得策略就不能模仿搜索引擎业非常时兴的超链分析技术。
在本次FTP搜索引擎爬虫模块的设计里,我采用了IP扫描技术和手工添加技术的中和。
一方面,程序一开始会读取系统的配置文件,获知本次扫描的网段范围,在对配置文件进行数据效验通过之后,程序会调用相应模块生成该网段中所有的等待访问的IP地址。
另一方面,程序本身维护有一个IP站点列表,该列表中会保存用户手工配置的以及上一次扫描成功的IP站点性息,该IP列表中包含有提供FTP服务站点的IP地址和端口号。
3.2.1.2实现方法
根据网段生成IP地址的方法多种多样,在本次设计时,我考虑过以下两种方法。
1)IP地址分为四段(如:
192.168.0.1)每一段可能出现的值为0~255,用程序控制IP地址段的进位(256进1)。
用循环的方式,每次为最低位执行加1操作,并验证其是否需要执行进位操作,即可实现对于网段中IP地址的生成操作。
这种方法虽然能够较好的实现网段中IP地址的生成操作,但是由于要人工编写代码实现数据的进位操作,实现较为繁琐,而且由于种种原因的综合影响,不能够完全保证代码的稳定性。
2)IP地址分为四段(如:
192.168.0.1),每一段的长度为256,由于系统本身并不支持256进位的方式,虽然编程可以对其进行认为的进位控制,但是仍然带来一些不必要的麻烦。
由十进制和二进制之间的转换得到启发。
在实现是我IP地址转换为十进制进行操作。
转换方式为(以192.168.0.1为例)
。
同样使用循环的方式,每次对转换为十进制的IP地址进行加一操作,这样就避免了人工编写代码控制进位的麻烦,程序的稳定性和代码编写的效率都大大提高。
在上面的循环操作执行完成之后,我们可以得到一个IP地址表,注意,此时IP地址表中的IP地址均以十进制的数字方式保存。
在使用时,我们需要将这些数字再次转化为IP地址。
利用.netFramework中提供的IPAddress类中的Parse方法,可方便的将我们获取的十进制数据再次转换为类型为IPAddress类型的IP地址数据,最后我们使用ToString()方法将其转化为字符串,方便以后的使用。
有上面的描述可以看出,在目前的状况下方法2)优于方法1),因此本次设计我选用了方法2)进行实现。
3.2.1.3核心代码
publicList
List
longstartIP,endIP;
startIP=frs_num[0]*256*256*256+frs_num[1]*256*256+frs_num[2]*256+frs_num[3];
endIP=tos_num[0]*256*256*256+tos_num[1]*256*256+tos_num[2]*256+tos_num[3];
System.Net.IPAddressresultIP;
for(longi=startIP;i<=endIP;i++){
resultIP=System.Net.IPAddress.Parse(i.ToString());
listIP.Add(resultIP.ToString());
}
eturnlistIP;
}
图31IP网段生成
3.2.2获取数据
3.2.2.1设计思路
这一部分的实现虽然比较复杂,但是设计思路却较为简单,首先需要向目标站点发送数据请求。
FTP站点会根据请求回传的数据,若请求有误,则会回传错误信息。
3.2.2.2实现方法
在前期准备工作结束之后,由于使用的开发语言为C#,因此考虑使用.netFramework中提供的FTPWebRequest类库实现该功能。
但是后来发现FTPWebRequest类库中提供的功能并不能很好的满足本次设计的需要,并且对目标FTP站点的配置有一定的要求。
因此后来放弃了这种方法,改用套接字的方式实现,向指定站点发送FTP命令,然后获取其回传的数据,由于这种方法可以自由的使用所有FTP命令,所以相对原有的方法更为灵活。
下面是两种方法的设计思路。
1)使用FTPWebRequest类:
用此方法,首先需要取得FTPWebRequest的实例。
注意,这里必须拥有服务器的有效用户名和密码,或者服务器必须允许匿名登录。
当需要指定用户名和密码是,可通过设置Credentials属性来制定用于连接服务器的凭据,也可以将它们包含在传递给Create方法的URI的UserInfo部分中。
使用FTPWebRequest类可以完成对FTP服务器的多种操作,如获取服务器文件简短列表、获取服务器上文件大小等。
经过查阅资料,发现其内部的实现方式仍然是使用FTP命令实现。
(如ListDirectory对应的是FTP命令中的NLIST命令,ListDirectoryDetails对应的是FTP命令中的LIST命令)下面简要介绍一下这种方法的使用方式(以下代码执行了一次文件删除操作)
publicstaticboolDeleteFileOnServer(UriserverUri){
if(serverUri.Scheme!
=Uri.UriSchemeFTP){
returnfalse;
}
FTPWebRequestrequest=(FTPWebRequest)WebRequest.Create(serverUri);
request.Method=WebRequestMethods.FTP.DeleteFile;
FTPWebResponseresponse=(FTPWebResponse)request.GetResponse();
Console.WriteLine("Deletestatus:
{0}",response.StatusDescription);
response.Close();
returntrue;
}
图32FTPWebRequest方式
2)使用套接字(Socket)方式:
如果编写过网络程序,那么您对这种实现方法一定并不陌生,在.net中Socket类为网络提供了一套丰富的方法和属性。
本次设计使用面向连接的协议(FTP),在进行数据通讯时使用Send和Receive方法实现。
IP地址和端口号使用IPEndPoint表示。
Socket的SendTimeOut属性中可以支持设置等待时间。
使用套接字实现获取数据,可以在代码中选取自己需要的FTP命令使用,因此相比使用FTPWebRequest类库,这种方式拥有更好的灵活性,可以按照自己程序的需要定制。
下面列举出本次设计使用的几条重要的FTP命令:
LIST:
获取FTP站点的文件和目录清单
SIZE:
获取FTP站点指定文件的大小
MDTM:
获取FTP站点文件的最后修改时间
USER:
登录FTP站点使用的用户名
PASS:
登录FTP站点的用户密码
QUIT:
关闭FTP连接
下面给出部分代码(用于登录FTP服务器):
publicvoidlogin(){
clientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPointep=newIPEndPoint(IPAddress.Parse(remoteHost),remotePort);
clientSocket.SendTimeout=5000;
try{
clientSocket.Connect(ep);
}
catch(Exceptionex){
thrownewIOException(ex.Message);
}
Reply();
if(retValue!
=220){
close();
return;
}
if(debug)Console.WriteLine("USER"+remoteUser);
sendCommand("USER"+remoteUser);
if(!
(retValue==331||retValue==230)){
cleanup();
thrownewIOException(reply.Substring(4));
}
if(retValue!
=230){
if(debug)Console.WriteLine("PASSxxx");
sendCommand("PASS"+remotePass);
if(!
(retValue==230||retValue==202)){
cleanup();
thrownewIOException(reply.Substring(4));
}
}
logined=true;
error=false;
chdir(remotePath);
}
图33socket方式
3.2.2.3获取文件列表
1)设计思路:
使用List命令获取文件和目录列表,根据回传的数据中包含有标志位,说明了该文件名表示的是目录还是文件。
在此处遇到了一个服务其兼容的问题,测试时发现FTP服务器返回的数据格式风格不同,如IIS和Serv-U,IIS返回的数据为Windows风格,而Serv-U返回的数据则是Linux风格,因此这里对于返回数据的处理不可能用同样的方法,具体解决方法请参见3.2.4服务器兼容中的描述。
2)实现方法:
使用Socket中的Send命令,向FTP服务器发送LIST命令。
同样,使用Socket提供的命令Receive,接收指定字节数的数据,并将数据存如缓冲区,此处指定的缓冲区大小为512个字节。
通过回传字符串中的标志位,获取回传的字符串中的目录。
下面是用于获取数据的主要代码:
SocketcSocket=createDataSocket();
sendCommand("LIST"+mask);
if(!
(retValue==150||retValue==125||retValue==226)){
thrownewIOException(reply.Substring(4));
}
mes="";
while(true){
Int32bytes=cSocket.Receive(buffer,buffer.Length,0);
mes+=ASCII.GetString(buffer,0,bytes);
if(bytes break; } 图34获取文件列表 图35获取文件列表 3.2.2.4获取目录列表 1)设计思路: 使用List命令获取文件和目录列表,根据回传的数据中包含有标志位,说明了该文件名表示的是目录还是文件。 在此处遇到了一个服务其兼容的问题,测试时发现FTP服务器返回的数据格式风格不同,如IIS和Serv-U,IIS返回的数据为Windows风格,而Serv-U返回的数据则是Linux风格,因此这里对于返回数据的处理不可能用同样的方法,具体解决方法请参见3.2.4服务器兼容中的描述。 2)实现方法: 使用Socket中的Send命令,向FTP服务器发送LIST命令。 同样,使用Socket提供的命令Receive,接收指定字节数的数据,并将数据存如缓冲区,此处指定的缓冲区大小为512个字节。 通过回传字符串中的标志位,获取回传的字符串中的目录。 下面是用于获取数据的主要代码: SocketcSocket=createDataSocket(); sendCommand("LIST"+mask); if(! (retValue==150||retValue==125||retValue==226)){ thrownewIOException(reply.Substring(4)); } mes=""; while(true){ Int32bytes=cSocket.Receive(buffer,buffer.Length,0); mes+=ASCII.GetString(buffer,0,bytes); if(bytes break; } 图36获取目录列表 3.2.2.5获取文件大小 1)设计思路: 使用SIZE命令获取指定目录下指定文件的大小,根据回传的数据中包含有标志位,说明了该命令是否执行成功,若执行成功,则获取了文件的大小。 2)实现方法: 使用Socket中的Send命令,向FTP服务器发送SIZE命令。 同样,使用Socket提供的命令Receive,接收指定字节数的数据,并将数据存如缓冲区,此处指定的缓冲区大小为512个字节。 使用SIZE命令获得的文件大小单位是字节,通过将返回数据除以1024获得将单位转换为KB。 下面为该部分的主要代码: publiclonggetFileSize(StringfileName){ if(! logined){ try{ login(); } catch{ returnnull; } } sendCommand("SIZE"+fileName); longsize=0; if(retValue==213){ size=Int64.Parse(reply.Substring(4)); } else{ thrownewIOException(reply.Substring(4)); } returnsize; } 图37获取文件大小 3.2.2.6文件分类 1)设计思路: 在配置文件中建立一个文件分类列表,由于文件的类型划分是根据文件的后缀名进行的,因此单独将文件的后缀名分离出来,对照文件分类表进行类型匹配。 若匹配成功则返回类型编号,若失败,则返回一个默认编号。 2)实现方法: 使用.netFramework中提供的文件读取类StreamReader,将文件分类列表读入内存,与从FTP站点上获取的文件的后缀名进行逐一的匹配操作,若成功,返回类型编号,失败返回一个默认值。 从FTP站点上获取的文件名中包含后缀名,使用split()函数将文件的后缀名分离出来用于后缀名匹配。 下面为该部分的主要代码: privatevoidGetInfo(){ StringstrTmp; Int32styleLength; strTmp=sw.ReadLine(); styleLength=Int32.Parse(strTmp); styleNames=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 正文 模板 双面 打印