最新web浏览器设计与实现.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateweb浏览器设计与实现沈阳工程学院 一、目的与任务1目的(1)加深对计算机网络的基本概念和原理,以及网络编程接口Socket概念及编程原理的理解;(2)提高学生网络应用与编程、分析与解决实际问题的能力,为大型网络编程打下坚实基础;(3)通过撰写课程设计报告,锻炼学生的逻辑组织和语言表达能力;(4)培养学生理论运用于实践的综合应用和设计创新能力。通过本次课程设计,使学生进一步理解、领会C#语言和网络编程技术,把所学的知识运用到具体的程序设计当中去,编写一个接近实际的应用程序。本课程设计是一门综合性实验。通过本次课程设计,掌握.net应用程序设计;加深对TCP/IP协议的理解;掌握C/S编程模式;掌握Socket机制、传输控制协议;用户数据报协议;掌握网络抓包的原理;掌握网络编程应用程序分析、设计、编程和调试的整个过程。2任务(1)设计完成与网络应用相关题目的网络应用软件;(2)调试运行之后,要求边演示边解释设计的思想、过程及采用的方法;(3)完成课程设计报告。二、基本要求1熟练掌握网络的基本概念和原理;2熟练掌握网络编程接口Socket概念及编程原理;3掌握基于TCP/IP的Internet编程技术;4掌握各种软件开发工具的使用过程及方法。三、设备及工具硬件:微机120台以上,I3以上处理器,1024M以上内存、Ethernet网卡,交换机软件:Windows2000/XP操作系统,VS2010编程环境。摘 要随着计算机技术和网络技术的发展,基于网络的开发也越来越多。C#是微软开发的一种简单易懂、面向对象、类型安全的编程语言。随.NET技术的不断发展,C#在各个方面的编程优势都已经显现出来。此次课程设计主要是利用C#进行网络与通信编程,完成简单的Web浏览器。在此次设计中,我完成的Web浏览器主要是通过HTTP协议来实现的。HTTP协议,即超文本传输协议。它是一个应用层的面向对象的协议,由于其简捷、快速的方式,非常使用于分布式超媒体信息系统。用户使用的大部分浏览器都是通过HTTP协议对网站中的内容进行浏览,在用户浏览网页时,在浏览器的地址中首先输入的就是HTTP,以告诉浏览器是通过HTTP协议来访问网页。在此系统应用中,重点内容是对收藏夹的应用,其中包括对注册表的使用。在C#中,Registry类、RegistryKey类可以实现对注册表的操作。Registry类中封装了注册表中7个基本主键,通过此类可以在注册表中找到标准根项集。RegistryKey类封装了对注册表的基本操作,包括读取、写入、删除等。通过具体设计,我完成的Web浏览器主要能实现的功能为:主界面、浏览网页、网页设置、浏览器设置等几个部分。 关键词 网络技术,C#,浏览器,HTTP协议-目 录第1章 绪 论1第2章 系统功能介绍22.1系统模型22.2 系统功能设计22.3 系统模块32.3.1 主界面功能介绍32.3.2 具体模块功能介绍32.3.3 关于ActiveX控件axWebBrowser的添加3第3章 系统功能实现43.1 浏览功能实现43.1.1 主菜单实现基本操作43.1.2 用“转到”按钮实现浏览83.1.3“帮助”功能实现83.2 浏览控制按钮功能实现93.3 历史记录功能实现11第4章 系统测试124.1测试用例124.1.1 测试用例1124.1.2 测试用例2124.1.3 测试用例3124.1.4 测试用例4124.1.5 测试用例5124.2系统测试124.2.1 系统测试1134.2.2 系统测试2144.2.3 系统测试3144.2.4 系统测试415结 论16致 谢16参考文献17第1章 绪 论C#(C Sharp)是微软(Microsoft)为.NET Framework量身订做的程序语言,C#拥有C/C+的强大功能以及Visual Basic简易使用的特性,是第一个组件导向(Component-oriented)的程序语言,和C+与Java一样亦为对象导向(object-oriented)程序语言。此次程序设计的主要任务是利用C#实现一个自制的简单的Web浏览器。浏览器是个显示网页伺服器或档案系统内的HTML文件,并让用户与此些文件互动的一种软件。个人电脑上常见的网页浏览器包括微软的Internet Explorer、Mozilla的Firefox、Opera和Safari。浏览器是最经常使用到的客户端程序。随着网络技术的发展,网络给人们带来了各种各样的信息,而浏览器是人们获取信息的途径。网页浏览器主要通过HTTP协议连接网页伺服器而取得网页,HTTP容许网页浏览器送交资料到网页伺服器并且获取网页。HTTP协议的主要特点可概括如下:l 支持客服端/服务器模式。l 客服端向服务器请求服务时,只需传送请求方法和路径。请求方法规定了客户与服务器联系的类型,常用的有GET、HEAD、POST等。l HTTP协议是无状态协议。无状态的含义是指协议对于事务处理没有记忆能力,当事务处理结束后,HTTP协议随之结束。此时在默认状态下,如果后续处理需要前面的信息,则它必须重传,这将会导致每次连接传送的数据量增大。如果服务器不需要先前信息时,它的应答就较快。在此次设计中,我完成的简单的Web浏览器就是基于HTTP协议的应用,它能实现在地址栏中输入地址后,能连接网站,并显示网页内容;能实现简单的设置、文件、帮助、后退、前进、刷新、首页等功能;此外,还能实现历史记录。使用这样的自制浏览器可以带来一些好处,例如它无需安装,无需升级,没有版权的限制,还可以随时增加或者减少自己需要或者不需要的功能。第2章 系统功能介绍2.1系统模型 本系统主要完成简单的Web服务器,实现在地址栏中输入地址,可以连接到网站,并显示网页的内容。在此基础之上,还可以实现简单的设置、文件、刷新、首页等功能。整个系统的功能模块图如图2.1所示。图2.1 系统功能模块图2.2 系统功能设计一个浏览器主要有的功能:主界面、浏览网页、浏览设置、浏览器设置等几个部分。本系统是基于HTTP实现的浏览器,在浏览器的创建过程中,应用到一个ActiveX控件,这个控件可以完成浏览器的大部分功能,可以通过此控件浏览到网页的内容。在系统中还创建了主菜单栏,并在主菜单栏中创建了对浏览器进行设置的“设为空白页”、“设为首页”等功能。同时,在“浏览控制按钮”栏中,创建了浏览器的一些基本功能,“后退”、“前进”、“刷新”、“首页”等。此外,用ComboBox控件制作了网页地址栏输入,可以在此输入需要浏览的网站地址,并且能实现历史记录。此系统的设计流程,如图2.2所示。图2.2 系统设计流程图2.3 系统模块2.3.1 主界面功能介绍主界面是浏览器主体,运行程序,首先看到的是主界面,如图2.3所示。图2.3 主界面在主界面的最上边是一个menuStrip组件,列出浏览器“文件”、“编辑”、“查看”“工具”“帮助”等选项。主菜单栏下是一个toolStrip控件,用于显示浏览控制按钮。在浏览控制按钮下是一个Pannel控件,在此控件上,添加一个Lable控件用于显示文字信息“地址”,添加一个ComboBox控件用于输入网页地址信息,添加一个Button控件用于发送HTTP协议。2.3.2 具体模块功能介绍在主菜单中,能实现的功能主要有“设置”、“文件”、“工具”和“帮助”。其中,“设置”能实现设为空白页、设为首页和动感效果;“文件”能实现新建、打开和推出;“工具”能实现发送邮件;“帮助”能实现“关于”,它弹出一个对话,显示关于浏览器的简单说明。在浏览控制按钮栏中,能实现基本的浏览控制:新建、后退、前进、停止、刷新、主页。在地址栏中输入地址,按回车键或者“转到”按钮都可连接到网站并显示网页内容。此外,点击地址栏的下拉列表可查看历史记录。2.3.3 关于ActiveX控件axWebBrowser的添加1.在C# Windows应用程序的新建项目中,选择“工具”,打开“选择工具箱项”对话框。2.在此对话框中打开“COM组件”选项卡,在列表框中选中“Microsoft Web浏览器”复选框。3.单击“确定”按钮,在集成开发环境的“工具箱”便会出现“Microsoft Web浏览器”控件,将此控件拖曳到Form窗口上。按照以上步骤操作,就完成了axWebBrowser控件的添加。第3章 系统功能实现3.1 浏览功能实现3.1.1 主菜单实现基本操作 / / menu_File / this.menu_File.Index = 0; this.menu_File.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menu_FileNew, this.menu_FileOpen, this.menu_FileSave, this.menu_FileSaveAs, this.menuItem5, this.menu_FileProperty, this.menu_FileExit); this.menu_File.Text = "文件(&F)" / / menu_FileNew / this.menu_FileNew.Index = 0; this.menu_FileNew.Text = "新建" this.menu_FileNew.Click += new System.EventHandler(this.menu_FileNew_Click); / / menu_FileOpen / this.menu_FileOpen.Index = 1; this.menu_FileOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO; this.menu_FileOpen.Text = "打开" this.menu_FileOpen.Click += new System.EventHandler(this.menu_FileOpen_Click); / / menu_FileSave / this.menu_FileSave.Index = 2; this.menu_FileSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS; this.menu_FileSave.Text = "保存" this.menu_FileSave.Click += new System.EventHandler(this.menu_FileSave_Click); / / menu_FileSaveAs / this.menu_FileSaveAs.Index = 3; this.menu_FileSaveAs.Text = "另存为" this.menu_FileSaveAs.Click += new System.EventHandler(this.menu_FileSaveAs_Click); / / menuItem5 / this.menuItem5.Index = 4; this.menuItem5.Text = "-" / / menu_FileProperty / this.menu_FileProperty.Index = 5; this.menu_FileProperty.Text = "属性(&R)" this.menu_FileProperty.Click += new System.EventHandler(this.menu_FileProperty_Click); / / menu_FileExit / this.menu_FileExit.Index = 6; this.menu_FileExit.Shortcut = System.Windows.Forms.Shortcut.CtrlX; this.menu_FileExit.Text = "退出(&C)" this.menu_FileExit.Click += new System.EventHandler(this.menu_FileExit_Click); / / menu_Edit / this.menu_Edit.Index = 1; this.menu_Edit.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menu_EditCut, this.menu_EditCopy, this.menuEditPaste, this.menuItem16, this.menu_EditSelAll, this.menu_EditFind); this.menu_Edit.Text = "编辑(&E)" / / menu_EditCut / this.menu_EditCut.Index = 0; this.menu_EditCut.Shortcut = System.Windows.Forms.Shortcut.CtrlX; this.menu_EditCut.Text = "剪切" this.menu_EditCut.Click += new System.EventHandler(this.menu_EditCut_Click); / / menu_EditCopy / this.menu_EditCopy.Index = 1; this.menu_EditCopy.Shortcut = System.Windows.Forms.Shortcut.CtrlC; this.menu_EditCopy.Text = "复制" this.menu_EditCopy.Click += new System.EventHandler(this.menu_EditCopy_Click); / / menuEditPaste / this.menuEditPaste.Index = 2; this.menuEditPaste.Shortcut = System.Windows.Forms.Shortcut.CtrlV; this.menuEditPaste.Text = "粘贴" this.menuEditPaste.Click += new System.EventHandler(this.menuEditPaste_Click); / / menuItem16 / this.menuItem16.Index = 3; this.menuItem16.Text = "-" / / menu_EditSelAll / this.menu_EditSelAll.Index = 4; this.menu_EditSelAll.Shortcut = System.Windows.Forms.Shortcut.CtrlA; this.menu_EditSelAll.Text = "全选" this.menu_EditSelAll.Click += new System.EventHandler(this.menu_EditSelAll_Click); / / menu_EditFind / this.menu_EditFind.Index = 5; this.menu_EditFind.Shortcut = System.Windows.Forms.Shortcut.CtrlF; this.menu_EditFind.Text = "查找" this.menu_EditFind.Click += new System.EventHandler(this.menu_EditFind_Click); / / menu_View / this.menu_View.Index = 2; this.menu_View.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menu_ViewSource); this.menu_View.Text = "查看(&V)" / / menu_ViewSource / this.menu_ViewSource.Index = 0; this.menu_ViewSource.Text = "源文件" this.menu_ViewSource.Click += new System.EventHandler(this.menu_ViewSource_Click); / / menu_Tool / this.menu_Tool.Index = 3; this.menu_Tool.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menu_ToolInternet, this.menuItem1, this.menuItem3, this.menuItem6); this.menu_Tool.Text = "工具(&T)" / / menu_ToolInternet / this.menu_ToolInternet.Index = 0; this.menu_ToolInternet.Text = "Internet选项" this.menu_ToolInternet.Click += new System.EventHandler(this.menu_ToolInternet_Click); / / menuItem1 / this.menuItem1.Index = 1; this.menuItem1.Text = "收藏夹" / / menuItem3 / this.menuItem3.Index = 2; this.menuItem3.Text = "设置" / / menuItem6 / this.menuItem6.Index = 3; this.menuItem6.Text = "下载内容" / / menu_Help / this.menu_Help.Index = 4; this.menu_Help.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menu_HelpAbout, this.menuItem2); this.menu_Help.Text = "帮助(&H)" this.menu_Help.Click += new System.EventHandler(this.menu_Help_Click); / / menu_HelpAbout / this.menu_HelpAbout.Index = 0; this.menu_HelpAbout.Text = "关于" this.menu_HelpAbout.Click += new System.EventHandler(this.menu_HelpAbout_Click); / / menuItem2 / this.menuItem2.Index = 1; this.menuItem2.Text = "检查更新" / / menuItem4 / this.menuItem4.Index = 5; this.menuItem4.Text = "添加到收藏"3.1.2 用“转到”按钮实现浏览在地址栏中输入网址,除了按回车键可以连接到网站外,还可以单击地址栏后的“转到”按钮连接到网站。双击设计窗体中的“转到”按钮,在此按钮的Click事件中添加代码实现用“转到”按钮浏览。程序代码如下:this.btnGo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnGo.Font = new System.Drawing.Font("华文彩云", 8.999999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)(134); this.btnGo.Location = new System.Drawing.Point(318, 36); this.btnGo.Name = "btnGo" this.btnGo.Size = new System.Drawing.Size(63, 22); this.btnGo.TabIndex = 3; this.btnGo.Text = "转到" this.btnGo.Click += new System.EventHandler(this.btnGo_Click);3.1.3“帮助”功能实现“帮助”可实现“关于”功能。在主菜单中,选择“帮助”,打开“关于”,弹出一个对话框,它是关于程序的简单描述,如图3.2所示。图3.2 关于对话框“关于”对话框是在“关于”的Click事件中调用另一个窗体Form2来实现的,“关于”的程序代码如下: this.menu_HelpAbout.Index = 0; this.menu_HelpAbout.Text = "关?于?; this.menu_HelpAbout.Click += new System.EventHandler(this.menu_HelpAbout_Click); 在Form2窗体的设计中,添加一个PictureBox控件来显示图片,添加Label控件来实现文字的显示,并用一个“确定”按钮来实现退出对话框。程序如下所示: private void menu_HelpAbout_Click(object sender, System.EventArgs e)MessageBox.Show("旭日浏览器1.0","旭日浏览器",MessageBoxButtons.OK,MessageBoxIcon.Information);private void menu_FileExit_Click(object sender, System.EventArgs e)this.Close();3.2 浏览控制按钮功能实现在Form设计窗口中,在toolStrip控件上双击鼠标左键,为此控件的Click事件添加相应的程序代码,可以实现对浏览器进行后退、前进、暂停、刷新、首页、搜索操作。程序代码如下:this.mainToolBar.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; this.mainToolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton this.tbb_New, this.toolBarButton1, this.tbb_Back, this.tbb_Forward, this.toolBarButton2, this.tbb_Stop, this.tbb_Refresh, this.tbb_GoHome, this.toolBarButton3); this.mainToolBar.ButtonSize = new System.Drawing.Size(60, 22); this.mainToolBar.DropDownArrows = true; this.mainToolBar.ImageList = this.imageList1; this.mainToolBar.Location = new System.Drawing.Point(0, 0); this.mainToolBar.Name = "mainToolBar" this.mainToolBar.ShowToolTips = true; this.mainToolBar.Size = new System.Drawing.Size(724, 28); this.mainToolBar.TabIndex = 7; this.mainToolBar.TextAlign = System.Windows.Forms.ToolBarTextAlign.Right; this.mainToolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.mainToolBar_ButtonClick); / / tbb_New / this.tbb_New.ImageIndex = 0; this.tbb_New.Name = "tbb_New" this.tbb_New.Text = "新建" this.tbb_New.ToolTipText = "新建" / / toolBarButton1 / this.toolBarButton1.Name = "toolBarButton1" this.toolBarButton1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; / / tbb_Back / this.tbb_Back.ImageIndex = 1; this.tbb_Back.Name = "tbb_Back" this.tbb_Back.Text = "后退" this.tbb_Back.ToolTipText = "后退" / / tbb_Forward / this.tbb_Forward.ImageIndex = 2; this.tbb_Forward.Name = "tbb_Forward" this.tbb_Forward.Text = "前进" this.tbb_Forward.ToolTipText = "前进" / / toolBarButton2 / this.toolBarButton2.Name = "toolBarButton2" this.toolBarButton2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; / / tbb_Stop / this.tbb_Stop.ImageIndex = 3; this.tbb_Sto