




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章 网络编程简介这里所说的网络主要是指因特网(Internet)。本章先介绍网络与编程的一些基本概念,然后重点讲解Socket的MFC与C# 编程和ASP.NET的Web编程。13.1 网络与编程本节先介绍网络发展的简史,再给出两种主流的分层网络模型,然后讨论与网络编程有关的接口和技术等基本内容。13.1.1 因特网与万维网因特网(Internet,网际网/互联网) 的前身是1969年底启用的ARPANet (Advanced Research Projects Agency Network,美国国防部高级研究计划署网络,阿帕网),由Bob Taylor和Larry Roberts等人主持研制。1973年底,Robert E. Kahn和Vinton Cerf提出了基于包交换的两个网络协议IP(Internet Protocol, 网际协议)和TCP(Transmission Control Protocol,传输控制协议),1983年元旦ARPANet启用TCP/IP协议集。1986年,ARPANet的主干网被NSFNet(National Science Foundation Network,美国国家科学基金会网络)接替,并改名为Internet(因特网),1991年起对社会开放。1990年10月在CERN(Conseil Europeen pour la Recherche Nucleaire,欧洲粒子物理研究所)工作的Tim Berners-Lee提出了因特网应用层的两个协议:用于描述网页的HTML(HyperText Markup Language,超文本标记语言)和用于传输网页文档和各种资源数据的HTTP(Hypertext Transfer Protocol,超文本传输协议),创立了万维网(World Wide Web,WWW,环球网),一般简称为Web(蜘蛛网),Web网很快成为因特网的主体。1993年初,美国Illinois(伊利诺)大学的硕士研究生Marc Anderressen与Eric Bina合作在位于该校内的NCSA(National Center for Supercomputing Applications美国超级计算应用中心)开发出支持内嵌图像的网页浏览器马赛克(Mosaic),1994年10月Anderressen等人创办的网景公司Netscape推出了Navigator浏览器,得到广泛使用,大大推动了互联网的普及。1995年微软公司从伊利诺大学购得马赛克技术,并在此基础上开发出IE(Internet Explorer,因特网探索者)浏览器,随Windows 95免费推出。1994年10月Berners-Lee创立了万维网联盟(World Wide Web Consortium,W3C),负责万维网的管理和技术标准的制定。1998年2月W3C推出了划时代的XML(eXtensible Markup Language,可扩展标记语言),2000年1月又推出了用来替代HTML的XHTML(Extensible HTML,扩展的HTML)。传统的万维网Web正在向新的万维网One Web过渡,参见图13-1。图13-1 Web体系结构的发展其中:l URL(Uniform Resource Locator,统一资源定位符) 在因特网的Web服务程序上用于指定信息位置的表示方法,如/。l URI(Uniform Resource Identifier,统一资源标识符) = URL + URN。l URN(Uniform Resource Name,统一资源命名) 使用urn方案的URI,不一定意味着有确定的资源可用。如urn:isbn:0451450523。l IRI(Internationalized Resource Identifiers,国际化资源标识符) URI的国际化,支持Unicode。13.1.2 IP网络的分层与协议这里的IP网络是指基于因特网协议套件(TCP/IP协议栈)的网络,包括:因特网(Internet)、城域网(Metropolitan Area Network,MAN)和内部网(Intranet)等。为了便于分析和管理,一般将通信网络抽象为若干层。主要有ISO(和IEC共同)制定的7层参考模型(Reference Model)ISO/OSI(国际标准,失败,主要用于理论研究)和因特网5层参考模型TCP/IP协议栈(实事标准,成功,应用十分广泛)。参见表13-1和图13-2&3。表13-1 ISO/OSI 7层参考模型OSI模型数据单元层功能主机层数据7. 应用对应用的网络过程6. 表示数据表示与加密5. 会话主机间通信段4. 传输端到端连接与可靠性 (TCP)介质层包/数据报3. 网络路径确定与逻辑寻址 (IP)帧2. 数据链接物理寻址(MAC & LLC)位1. 物理介质,信号与二进制传送其中:l ISO(International Organization for Standardization,国际标准化组织) 由153个国家的国家标准学会联合组成的一个非政府国际组织,总部(中央秘书处)设在瑞士的日内瓦,负责制定适应商业和广泛社会需要的各种国际标准,网址为。l IEC(International Electrotechnical Commission,国际电工技术委员会) 一个成立于1906年6月的国际标准化权威组织,属于联合国的甲级咨询机构,负责制定关于电工电子各方面的标准,有42个会员国,总部也设在瑞士的日内瓦,网址为http:/www.iec.ch。l OSI(Open Systems Interconnection,开放系统互连) 一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任 务。该模型的目的是使各种硬件在相同的层次上相互通信。对应的国际标准为:ISO 7498:1984、ISO/IEC 7498-14: 1994、1989、1989、1997)。l MAC(Media Access Control,介质访问控制) 数据链路层的子层,提供寻址和信道访问的控制机制,位于物理层和逻辑链路层之间。l LLC(Logical Link Control,逻辑链路控制)数据链路层的上部子层,在MAC层上传输的多路复用和分离协议,提供流量和差错控制。ISO/OSI 7层参考模型 因特网5层参考模型(及协议) 应用层(Application) 应用层 (HTTP/HTML、FTP、SMTP/POP3/IMAP、) 表示层(Presentation) 会话层(Session) 传输层(Transport) 传输层 (TCP/UDP) 网络层(Network) 互连网层 (IP/ICMP/IGMP) 数据链路层(Data-link) 网络接口层 (ARP/RARP) 物理层(Physical) 物理层图13-2 OSI与因特网参考模型的层次对应关系其中:l ARP(Address Resolution Protocol,地址解析协议) 计算机用来匹配IP地址到硬件地址的协议。计算机调用ARP广播一个请求,目标计算机应答该请求。l RARP(Reverse Address Resolution Protocol, 逆向地址解析协议) 计算机系统在自举时获取IP地址的协议。l IP(Internet Protocol, 网际协议) 定义互联网上包的格式与路由包到其目的地之机制。l ICMP(Internet Control Message Protocol,互连网控制消息协议)提供网络层的控制手段和差错报告。l IGMP(Internet Group Management Protocol,互连网组管理协议) 用来管理组播的,它是参加组播的主机与路由器之间交换组员信息的协议。不过,组播目前存在多个组的地址冲突问题,而且,现有的路由器一般不支持组播。l TCP(Transmission Control Protocol,传输控制协议) 为应用程序提供访问面向连接的通信服务,可靠、控制流量。特点:面向连接、累计确认与超时重传(保证数据传输的可靠性)、拥塞控制(基于滑动窗口协议)、报头变长(24B)。l UDP(User Datagram Protocol,用户数据报协议) 为用户提供无连接的服务,高效但不可靠,主要用于传输多媒体数据。特点:无连接、无差错控制(不重传)、报头中的校验和可选(可不计算和存储)、报头定长(8B)。l FTP(File Transfer Protocol , 文件传输协议) 因特网上管理文件传输的通讯协议,用于从一台计算机到另一台计算机传送完整的文件。l SMTP(Simple Message Transfer Protocol, 简单邮件传输协议) 用于电子邮件的传输。l POP3((Post Office Protocol,邮局协议第三版) 提供用户计算机对(本地邮件服务器中的)电子邮箱进行远程存取的脱机协议。l IMAP(Internet Message Access Protocol,因特网消息访问协议)提供用户计算机对(本地邮件服务器中的)电子邮箱进行远程操作的联机协议。图13-3 IP网络模型13.1.3 因特网编程通用的因特网编程,一般采用传统的套接字(Sockets)网络API,在Windows平台中对应的是Winsock。微软还自己开发了用于因特网应用层的编程接口WinInet。1Sockets和Winsock因特网(Internet)最初是基于Unix的,而Sockets(套接字/插座)是Unix第一个支持TCP/IP协议栈的网络API,最早于1982年8月随4.2 BSD版Unix推出,常被称为Berkeley sockets(伯克利套接字)。Unix的BSD(Berkeley Software Distribution,美国加州大学 伯克利分校软件分发)版,是由Sun公司的创始人之一兼首席技术官Bill Joy(比尔乔伊)于1977年在伯克利分校读研期间自己开发的。Sockets也是由他编写的。Winsock(Windows Sockets API)是从Sockets移植过来的TCP/IP编程的低级Windows API,由JSB公司的Martin Hall、Sun公司的Mark Towfiq和Geoff Arnold、微软公司的Henry Sanders和J Allard等人共同开发。图13-4 Bill JoyWinsock的版本有:l 1.0(1992年6月,微软不支持)l 1.1(1993年1月,微软在Windows for Workgroups 3.1的扩展包中支持,该扩展包也是Windows 95和Windows NT 3.x的组成部分)l 2(1994年,未公开发布)l 2.1.0(1996年1月,首个公开发布的Winsock 2规范,微软在Windows 95的扩展包中支持,该扩展包也是Windows 98和Windows NT 4.0及后续Windows版本的组成部分)l 2.2.0(1996年5月,去掉了对16位Windows应用程序的支持) l 2.2.1(1997年5月)l 2.2.2(1997年8月)在Windows中,除了可以直接用Winsock API进行C/C+编程外,还可以用Winsock的MFC和.NET BCL封装进行面向对象和组件的编程。MFC封装的Winsock类有:基本的异步套接字类CAsyncSocket和简单的套接字类CSocket。为了使用Winsock编程,程序员得详细了解因特网应用层的具体协议内容。2WinInet使用Winsock编程,程序员必须与基本的网络通信打交道,还必须详细了解因特网应用层协议的具体内容,包括对话模式、命令的组成和格式、命令发送的顺序等等。为了方便因特网应用程序的编写,微软在Winsock之外,还自己开发了用于因特网应用层编程的接口WinInet(Win32 Internet Extensions,32位Windows的因特网扩展)。WinInet的优点:l 支持高速缓存似IE,将HTML和其他因特网文件放入本地磁盘的特定目录,下次可直接加载该文件,而不是重复从因特网下载l 安全支持基本的质询/响应鉴别和SSL(Secure Socket Layer安全套接字层)l 采用缓冲I/Oread函数不返回值,可读取单独的文本行l 简单可使用状态回调函数OnStatusCallBack来对UI更新和注销;调用一个函数CInternetSession:OpenURL就可以找到IP地址、建立连接并准备好文件读取l 友好可分析和格式化报头,访问已经被移动的新位置处的服务器和文件MFC也包括了对WinInet的封装,提供了一些十分好用的类与全局函数,包括对HTTP、FTP、Gopher等协议的处理。13.1.4 万维网编程万维网是因特网的主体,主要由HTTP和HTML两个协议组成,参见图13-1。传统的C/S(Client/Server,客户/服务器)结构,也正在被B/S(Browser/ Server,浏览器/服务器)结构所代替。基于浏览器的应用程序(瘦客户端,thin client 或lean client),正在逐步取代基于窗口的网络应用程序(胖客户端,fat client或rich client)。所以网络编程的重点是万维网的编程。浏览器(browser)是用来显示和操作Web网页(page)的一种应用程序。1HTML最初,万维网的网页是全文本(所以才叫超文本),后来才引入图片和各种多媒体信息。HTML(HyperText Markup Language,超文本标记语言),是书写Web文档的一套语法规范,由万维网的发明人Tim Berners-Lee于1990年设计。1 特点l 是一种描述文档的标记语言,用标签(tag)来说明文档的内容与格式;l 源自SGML,是其应用与简化。其中,SGML(Standard Generalized Markup Language,标准通用化标记语言)是现代标记语言的鼻祖,为国际标准(ISO/IEC 8879:1986);l 支持超链接;图13-5 Tim Berners-Leel 支持C/S交互(如表单、JavaScript、Java Applet);l 基于HTTP,与平台无关。2 版本HTML的版本有:(圆括号内为制定者)l 0.91990.10. 基本超文本。(Berners-Lee & Connolly)l 1.01992.1. 内嵌图、文字格式。(CERN)l 2.01995.11. 表单。(IETF:RFC 1866)l 3.01996. 数字、表格、控件。未公开、未标准化。(W3C)l 3.2REC: 1997.1.14. 规范对Applet、脚本和颜色的支持。(W3C:REC标准)l 4.0REC: 1997.12.18 (1998.4.24推出修订版). 提倡结构与外观的分离,支持CSS(Cascading Style Sheets,层叠样式表单),提高了对(动态)页面的控制能力、改进外观和功能、支持多语言文档。(W3C:REC标准)l 4.01REC: 1999.12.24. 对4.0的修正与补充,如更新样式表单、添加内容短表、修正文档脚本等。(W3C:REC标准)l 5.0WD: 2008.1.22. 副标题为“HTML和XHTML的词汇和关联API”。在此版本中,为帮助Web应用的开发者而引入了许多新特性,并基于主流开发实践而引入了许多新元素,而且还为努力改进交互性的用户代理而定义清晰的顺应标准给予了特别关注。HTML5最初由Apple、the Mozilla Foundation和Opera Software于2004年联合成立的WHATWG发起制定(注意微软没有参加),后来纳入W3C标准计划,从2007年11月8日开始频繁推出与WHATWG草案同步的W3C编辑草案(W3C Editors Draft)和若干W3C自己的工作草案(W3C Working Draft)(W3C:WD)3 XHTMLW3C想用XHTML来代替HTML(上面的HTML5实际上也是XHTML5),XHTML的版本有:l 1.0XHTML 1.0: The Extensible HyperText Markup Language A Reformulation of HTML 4 in XML, REC:2000.1.26(可扩展超文本标记语言,基于XML的HTML,HTML4的XML重写);1.0 (Second Edition)REC: 2002.8.1;l 1.1XHTML 1.1 - Module-based XHTML, REC: 2001.5.31(基于模块的XHTML),其第2版仍在开发过程中:1.1(Second Edition)WD: 2007.2.16;l 2.0XHTML 2.0, WD8: 2006.7.26(针对丰富、移动的基于Web的应用,不向后兼容);l 5.0与HTML 5等价。从HTML到XHTML的各种版本演化,可参见图13-6。应用应用CSS 多语言内嵌图 文字格式表格、控件 Applet、脚本HTML 0.9Berners-Lee 1990HTML 1.0CERN 1992.1重内容轻格式 基本超文本HTML 2.0IETF 1995.11表单HTML 3.2W3C 1997.1.14HTML 4.0W3C 1997.12.18提倡结构与外观分离XHTML 1.0W3C 2000.1.26XML 1.0W3C 1998.2.10兼容 过渡XHTML 1.1W3C 2004.2.4XHTML MOD W3C 2001.4.10模块化XHTML 2.0W3C WD 2006.7.26通用化 多用途子集化 扩展性XML Events W3C 2003.10.14SGMLISO/IEC 1986子集应用XForms W3C 2003.10.14应用XHTML 5.0W3C WD 2008.1.22引入众多新特性和元素图13-6 从HTML到XHTML的版本演化4HTML的常用标签1)文档结构(html、head、title、body);2)文字格式(font、hi、p、br、hr、b、i、u、sup、sub);3)列表(ul、ol 、li);4)表格(table、caption、tr、th、td);5)表单(form、input、select、option);6)链接(a);7)图像(img);8)脚本(script);9)小应用程序(applet);10)框架(frameset、frame)。5例子 Test 试 验中山大学课程:程序设计 操作系统 编译原理成绩单 学号 姓名 成绩 01 张三 75 02 李四 82 运行结果为参见图13-7(另外还播放MIDI乐曲)。图13-7 HTML例2. 静态网页与动态网页静态网页是预先编写好了的纯HTML文档,内容固定不变。动态网页中则嵌入了各种脚本语言,由客户端的浏览器或服务器端的Web服务器解释执行,可动态生成网页内容。1)静态网页传统的网页是静态的:用户在浏览器中输入网址或点击超链接,浏览器发送HTTP请求,Web服务器将用户请求的(原来已经编写好的)HTML文档(*.htm/*.html/*.mht)用HTTP传送到客户端,浏览器显示所接收的网页,参见图13-8。HTTP响应HTTP请求客户浏览器Web服务器图13-8 网页的传输如何编写静态网页,本章不做详细介绍。有兴趣的同学可以参考各种HTML的书籍,或我的多媒体技术课件的第16章。2)客户端的动态网页利用嵌入在HTML文档中的脚本语言(JavaScript/JScript/VBScript)代码、Java小应用程序(Applet)、Flash(闪光)动画等,浏览器可以在客户端(分析、解析、并)生成动态的HTML内容。l JavaScript(爪哇脚本)是一种嵌入HTML文档中的基于对象的Web客户端脚本语言,用于创建在线应用程序,以产生交互式动态网页。由Netscape公司的Brendan Eich发明,于1995年9月18日随Navigator 2.0推出。l JScript(J脚本)是Microsoft公司于1996年8月随IE 3.0推出的与JavaScript兼容的脚本语言,但后来又增加了若干它自己的扩充。l VBScript(VB脚本)也是微软公司提出的一种脚本语言,采用了与VB类似的语法,于1996年推出。l Applet(小应用程序)是Sun公司于1995年随Java语言一起推出的一种利用JVM(Java Virtual Machine,爪哇虚拟机)在浏览器中运行的客户端小型应用程序。如何编写客户端的动态网页,本章也不做详细介绍。有兴趣的同学可以参考各种JavaScript或Java Applet的书籍,或我的多媒体技术课件的第17章。3)服务器端的动态网页由于客户端的计算能力有限,而且缺少数据库的支持,所以通用的做法是:根据用户的请求,利用存放在数据库中的有关信息,在服务器端动态生成客户所需要的完整HTML网页文档后,再传送给客户端。这同时还可以保护处理的源代码不被用户知晓。如何在服务器端生成动态网页,正是本章的重点。能在服务器端生成动态网页的技术非常之多,如CGI、PHP、ISAPI、ASP、Servlet、JSP、ASP.NET等,下面各小节将按这些技术出现的时间顺序,依次予以简单介绍。图13-9 服务器端的处理 13.1.5 服务器端的动态网页技术1CGI与Perl最早能在服务器端生成动态网页的技术为CGI(Common Gateway Interface , 公共网关接口),它是由NCSA的Rob McCool等人在1993年12月提出的一种连接外部应用软件和Web服务器的标准接口协议。注意,CGI并不是一种编程语言,而只是一种编程接口。CGI程序可以使用各种语言来编写,如Java、C/C+、VB、JavaScript、VBScript、Unix shell等,但是首选语言是Perl。Perl(Practical Extraction and Report Language,实用提取和报告语言)是由语言学家Larry Wall于1987年发明的一种解释性语言(其编写的程序称为Perl脚本),具有强大的文本和文件处理能力。CGI简单、可以用各类语言编写,因此适用于不同的程序员。但是CGI不安全、性能效率较差,因此它不是当今的主流技术。访问请求通过CGI传送给脚本档通过HTTP请求一Perl脚本的URL客户浏览器Web服务器通过HTTP返回结果HTML文档Perl脚本CGI运行脚本,将输出结果返回给服务器图13-10 CGI与Perl2PHP与LAMPPHP(最初为Personal Home Page个人主页的缩写;后来改为递归缩写PHP: Hypertext Preprocessor超文本预处理程序)是一种运行在服务器端的生成动态网页的计算机脚本语言,由Rasmus Lerdorf 于1995年6月设计。PHP面向目标(goal-oriented)、简明快捷、有强劲的数据库功能,是一种被广泛使用的通用脚本语言。PHP与Apache(Web服务器)、MySQL(数据库)及Linux(操作系统)是动态网页生成软件的开源绝配,也是目前最流行的服务器端动态网页开发技术套件,一般缩写为LAMP(Linux + Apache + MySQL + PHP)。但是,由于PHP缺乏规模支持和分层结构,对数据库的接口也不统一,所以只适用于中小型网站。3ISAPI与IISISAPI(Internet Server API,因特网服务器API)是微软公司的Web服务器IIS的一种多层API,它是一种底层的编程系统,提供更好的性能,但是以增加复杂性为代价。与CGI相比,ISAPI的应用程序一般被装入与IIS服务器的相同进程空间,去掉了进程间调用的需要,从而改善了性能。但是一个ISAPI应用程序的崩溃,可以导致整个Web服务器与其一起崩溃。ISAPI由扩展和过滤两个部分组成,这也是能用ISAPI开发仅有的两种的应用程序类型。它们必须用C+、C# 或Delphi Pascal编写,并编译成DLL文件,然后再注册到IIS,才可在Web服务器上运行。MFC和ATL都包含开发ISAPI应用程序的C+库。IIS(Internet Information Services,因特网信息服务)是微软公司为Windows操作系统提供一个Web服务器,是仅次于Apache的第二流行Web服务器。IIS是由许多可配置性非常强的子应用程序模块组成,ASP.NET就是其中之一。下面是IIS的各个版本的发布情况:l 1.01995年5月30作为Windows NT 3.51的免费附加集发布的l 2.01996年7月29日随Windows NT 4.0发布l 3.01997年5月15日随Windows NT 4.0 SP3发布l 4.01998年9月4日随Windows NT 4.0 Option Pack推出l 5.02000年2月17日随Windows 2000发布l 5.12001年10月25日随Windows XP 专业版和Windows MCE发布l 6.02003年4月24日随Windows Server 2003和Windows XP 64位专业版发布l 7.02006年11月8日随Windows Vista和Windows Server 2008发布4ASP与ASP.NETASP(Active Server Pages,活动服务器网页)是微软公司于1996年12月推出的首个服务器端动态生成网页的脚本引擎。它是一种解释性的脚本语言,主要用VBScript编写,也可以使用JScript和PerlScript等其他脚本语言。ASP的版本有:l 1.0 1996年12月随IIS 3.0发布 l 2.0 1997年9月随IIS 4.0发布 l 3.0 2000年11月随IIS 5.0发布 ASP 3.0现在也可用于Windows Server 2003上的IIS 6.0和Windows Server 2008之上的 IIS 7.0。ASP.NET是ASP在.NET平台的继任者,由微软公司于2002年1月5日随.NET框架1.0和Visual Studio .NET (2002)一起推出。它是一种依赖.NET框架的编译性语言,建立在CLR之上,允许程序员使用任何支持.NET的语言来编写ASP.NET代码。ASP.NET与传统的ASP的比较:l ASP.NET为了简化开发人员从Windows应用程序开发到Web开发的过渡,提供了创建由与Windows用户界面类似控件构成网页的能力。Web控件生成HTML和JavaScript代码段,可构成部分结果网页,发送到终端用户的浏览器。l ASP.NET鼓励程序员使用事件驱动的GUI模型来开发应用程序,而不是用传统的脚本环境如ASP和PHP。ASP.NET架构,试图将现存的(诸如JavaScript)技术,与内部组件(如ViewState)结合在一起,为天生无状态的Web环境带来持久的(中端-请求)状态。SP.NET与ASP的其他差别有: l 编译代码意味着应用程序运行得更快,而且可以在开发阶段捕捉更多的设计时错误。 l 利用使用try-catch块的异常处理,显著改善了运行时的出错处理。 l 与Windows应用程序有相似的寓意,如控件和事件。l 一个扩展的控件和类库,可以快速创建应用程序;加上用户自定义控件,可以使用通用模板,如菜单。这些控件在网页中的布局也很容易,因为它们中的大多数都可以进行可视化编辑。l ASP.NET利用.NET CLR的跨语言能力,可以让Web网页使用VB.NET、C#、J#、Delphi.NET、Chrome等进行编码。l 可缓存整个网页或仅其中某一部分以改善性能。l 可使用后代码(code-behind)开发模型,以分离业务逻辑和表示。l 如果一ASP.NET应用程序发生内存泄漏,ASP.NET 运行时会卸载出错应用程序的宿主AppDomain,然后重新装载此应用程序到一个新AppDomain中。l ASP.NET中的会话状态可以保存到SQL Server数据库中,或到运行在同一机器或不同机器上的作为Web服务器的另一进程中。这样,会话值在Web服务器重启或ASP.NET的工作进程再生时,不会被丢失。l 从2.0版起,ASP.NET所生成的HTML 4.0和XHTML 1.0/1.1输出都是有效的。对Web浏览器的标准兼容性的检测也更健壮,而且对CSS的支持也更广泛。l Web服务器控件是ASP.NET为Web窗体提供UI(用户界面)而引进的,它们是状态托管控件,而且是WYSIWYG (What You See Is What You Get,所见即所得)。5Servlet与JSPServlet(The Java Servlet API)是由Sun公司于1997年6月推出的一种,可让软件开发人员使用Java平台,为Web服务器添加动态内容的应用程序接口。JSP采用Java语言,技术性很强,需要专业人员才能进行开发。JSP(JavaServer Pages,爪哇服务器网页)是一种可让软件开发人员在服务器端生成动态网页的Java技术,采用的是Scriptlet脚本语言,可以视为是Servlet的一种高层抽象。JSP由Sun公司于1999年9月推出,是J2EE企业开发平台的重要组成部分。参见下图:J2EE服务器Web容器JSPservletEJB容器EJBWeb浏览器数据库图13-11 JSP与J2EEJSP特点:Java优势利用、平台无关、内容生成和显示分离/业务逻辑和表示分离、采用标签简化开发、组件重用、开源代码等。图13-12 JSP的运行环境13.2 MFC 套接字类编程MFC提供了两个套接字类CAsyncSocket和CSocket,它们封装了Winsock 1.0版的函数,可方便地编写因特网程序。CAsyncSocket提供异步读写(网络通信),而CSocket则提供同步读写(网络通信),后者是前者的派生类,它们都是MFC的基类CObject的派生类。图13-13 MFC中的套接字类基类CAsyncSocket提供全面的由事件驱动的Socket通信能力,你可以在派生的套接字类中响应这些事件。CSocket类是CAsyncSocket的派生类,封装和简化了其基类的某些功能,是Winsock的高层接口。由于Windows程序是基于消息机制的,MFC的套接字类也提供消息编程,可以通过它们的成员函数AsyncSelect来选择感兴趣的事件。13.2.1 编程过程为了使建立的项目支持Winsock,需要在“MFC应用程序向导”的“高级功能”页中选中“Windows套接字”复选框。1初始化Winsock环境在使用MFC 的套接字类之前,必须为应用程序初始化Winsock环境,这只需在项目的应用类的初始化实例函数InitInstance中调用全局函数AfxSocketInit:BOOL AfxSocketInit( WSADATA* lpwsaData = NULL );该函数以WSADATA结构:struct WSAData WORD wVersion; WORD wHighVersion; char szDescriptionWSADESCRIPTION_LEN+1; char szSystemStatusWSASYSSTATUS_LEN+1; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo;作为可选参数,能得到当前计算机的Winsock的版本等信息。一般不需要,如:BOOL CSockApp:InitInstance() if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;若在项目创建过程中,选中了Windows Socket复选框,则MFC会自动添加上述代码。2创建套接字为了使所建立的应用程序可以使用套接字,还必须在项目的应用类中声明一个MFC套接字派生类的类变量,如:class CSockApp : public CWinApp . .private:CAsyncSocket m_sSock;在使用该对象之前,必须调用其Create成员函数来构造具体的套接字:BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );一般不需要任何输入参数,但对服务器端的网络应用程序,需要指定监听端口号(nSocketPort),如:l 客户端:m_sSock.Create();l 服务器端:m_sServSock.Create(4000);其中,参数nSocketType可取值为SOCK_STREAM(对应于传输层面向连接的TCP协议)和SOCK_DGRAM(对应于传输层无连接的UDP协议);参数lpszSocketAddress为网络地址,当计算机上有多个网卡时有用,单网卡可用。TCP和UDP的端口是一个16位无符号整数,取值范围为065535。其中,01023为著名端口、102449151为已注册端口、4915265535为动态或私有端口。下面是若干常用的缺省TCP/UDP端口:HTTP(80)、HTTPS(443)、FTP(21)、SMTP(25)、POP3(110)、DNS(53)、SQL(118/156)、Login(513)、Echo(7)、Socket proxy(1080)、Web proxy(8080)。3打开连接打开一个网络连接需要三个步骤:l 服务器端调用Listen函数监听连接请求:BOOL Listen( int nConnectionBacklog = 5 ); / 待连接的队列长度,最大为5l 客户端调用Connect函数发出连接请求:BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort );l 服务器端调用Accept函数接受连接请求:virtual BOOL Accept( CAsyncSocket& rConnectedSocket,SOCKADDR* lpSockAddr = NULL,int* lpSockAddrLen = NULL );如:if (m_sServSock.Listen() . else .if (m_sSock.Connect(L, 4000) . else .if (m_sServSock.Accept(m_sSock) . else .若连接成功或失败,CAsyncSocket都会激发一个事件通知应用程序,而CSocket类在连接成功或失败之前不会返回。4发送/接收消息可以通过套接字发送和接收任何类型的数据,需要一个缓冲区来存放待发或刚接收到的数据。发送数据使用Send函数:virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0 ); / 返回发送的数据总量接收数据则使用Receive函数:(在接收完数据之前不会返回)virtual int Receive( void* lpBuf, int nBufLen, int nFlags = 0 ); / 返回接收到数据量出错都返回SOCKET_ERROR。如:l 发送:CString strMessage;int iLen, iError;.iLen = strMessage.GetLength();iError = m_sSock.Send(LPCSTR(strMessage), iLen);if (iError = SOCKET_ERROR) . else .l 接收:char *pBuf = new char1025;int iBufSize = 1024;int iRcvd;CString strRecvd;iRcvd = m_sSock.Receive(pBuf, iBufSize);if (iRcvd = SOCKET_ERROR) . else pBufiRcvd = NULL; / 分隔垃圾数据strRecvd = pBuf;.5关闭连接应用程序在完成与对方的所有通信知后,应该调用Close函数来关闭连接:virtual void Close( );13.2.2 编程实例为了说明Winsock的基本功能,我们创建一个基于对话框的简单MFC网络程序,它可同时作为服务器与客户端使用(两份运行实例)。服务器负责监听,客户端请求连接,在建立连接后的两端发送和接收消息,程序将把消息显示在对话框中的列表中。1创建项目创建一个名为Sock的基于对话框的MFC应用程序项目,注意,应该去选“使用Unicode库”复选框,参加下图:图13-14 选择“基于对话框”并去选“使用Unicode库”复选框另外需要在“MFC应用程序向导”的“高级功能”页中选中“Windows套接字”复选框(参见下图),其余采用默认设置,按“完成”创建项目。图13-15 选中“Windows套接字”复选框2设计对话框资源在MFC生成的ID为IDD_SOCK_DIALOG的对话框中,添加控件如下图:图13-16 Sock程序的界面其中,l 套接字类型中“客户端”和“服务器”单选钮的ID分别为IDC_RCLIENT和IDC_RSERVER,前一个设置其Group属性为True;l “服务器名”和“服务端口”编辑框的ID分别为IDC_ESERVNAME和IDC_ESERVPORT;l “连接”按钮的ID为IDC_BCONNECT;l “关闭”按钮的ID为IDC_BCLOSE,设置其Disabled属性为True;l “消息”编辑框的ID为IDC_EMSG,也设置其Disabled属性为True;l “发送”按钮的ID为IDC_BSEND,还是设置其Di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽中医药大学《建筑遗产保护与更新》2024-2025学年第一学期期末试卷
- 医疗事故应急处理流程与法规解读
- 小学语文古诗文背诵及理解训练
- 广西物流职业技术学院《文化万象英语视听说》2024-2025学年第一学期期末试卷
- 江西农业大学《文史哲要籍解题》2024-2025学年第一学期期末试卷
- 华南农业大学《纳米生物技术》2024-2025学年第一学期期末试卷
- 贵州医科大学《动物生物制品学》2024-2025学年第一学期期末试卷
- 2025年基础外科手术器械项目规划申请报告
- 江苏安全技术职业学院《智能计算》2024-2025学年第一学期期末试卷
- 电商平台护肤品品牌推广营销策划书
- 龙门吊警示教育
- 班主任培训:家校共育
- 《数据安全法》考试参考题库100题(含答案)
- 档案管理服务承诺书
- 胶原蛋白对皮肤的重要性
- 2025年绵阳燃气集团有限公司招聘笔试参考题库含答案解析
- 《石膏的护理》课件
- 护理法律相关案例分析
- 2025版《折弯机安全操作规程》全
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
评论
0/150
提交评论