《C+网络编程高级编程.ppt》由会员分享,可在线阅读,更多相关《C+网络编程高级编程.ppt(77页珍藏版)》请在三一办公上搜索。
1、第15章 网络编程,C+高级编程,本章主要教学内容,简略介绍网络的基本知识、功能及协议。客户机/服务器的网络模型及其原理。网络应用程序的编写:客户端应用程序、服务器端应用程序、浏览器程序、电子邮件发送程序。,15.1 网络概述,计算机网络:地理位置不同、具有独立功能的多个计算机系统,通过通信设备和线路互相连接起来,使用功能完整的网络软件来实现网络资源共享的大系统,称为计算机网络。,计算机网络从结构上可以分乘两部分:资源子网和通信子网。,计算机网络的组成:,15.1 网络概述,计算机网络组成示意图,15.1 网络概述,计算机网络结构示意图,资源子网:负责全网的数据处理以及向网络用户提供网络资源及
2、网络服务等。一般由主计算机系统、终端、各种硬件和软件资源和数据资源等组成。通信子网:为资源子网提供信息传送服务,是支持资源子网上用户之间相互通信的基本环境。一般由通信控制器、集线器、调制解调器、网络通信媒体等组成。,15.1 网络概述,计算机网络的分类:按网络覆盖的地理范围可分为:局域网LAN(local area network)城域网 MAN(metropolitan area network)广域网WAN(wide area network),15.1 网络概述,其它分类有:按交换方式、按传输媒体等分类,按网络拓扑结构可分为:星型网络 总线型网络 环型网络-网格型网络,15.1 网络概述
3、,计算机网络功能主要有:数据通信资源共享:共享硬件、软件、信息和知识等分布式数据处理,提高可靠性,15.1 网络概述,计算机网络的体系结构有两大类:对等网络和基于服务器的网络,对等网络的特点:在对等网络中,没有专用的服务器,网上所有 的计算机地位是平等的;网上所有计算机都既是客户机又是服务器;每台计算机的用户自己决定将其计算机中的哪 些数据共享到网络中去;没有负责整个网络管理的网络管理员;,15.1 网络概述,对等网络的优点:规模小,成本低,实现简单,15.1 网络概述,基于服务器的网络的特点:网络中有专用服务器(或主机)网络中有客户机(或终端)有网络操作系统和网络管理员对网络进行统一管理,基
4、于服务器的网络的优点:易于管理共享资源 安全性好 数据备份方便 网络规模基本不受限制,15.1 网络概述,15.1 网络概述,基于服务器的网络结构又分为:Client/Server结构(胖客户机)Browser/Server结构(瘦客户机)。,服务器Server:一台能够提供和管理可共享资源的计算机。客户机Client:能够使用服务器上的可共享资源的计算机。,Client/Server(客户机/服务器)结构,15.1 网络概述,服务器需要运行某一种网络操作系统,例如Windows Server 2003、Novell Netware、Unix等。通常有多台客户机连接到同一台服务器上,它们除了能
5、运行自己的应用程序外,还可以通过网络获得服务器的服务。在这种以服务器为中心的网络中,一旦服务器出现故障或者被关闭,整个网络将无法正常运行。,15.1 网络概述,15.1.1 客户机/服务器模型,客户机/服务器模型的工作原理:,请求,通信设施,请求,响应,客户端,服务器端,15.1.1 客户机/服务器模型,采用客户机/服务器模型的原因:,不对等现象的存在:服务器端有丰富的资源,强大的运算能力,可存放大量的资源和信息。而客户端在软硬件的配置上相对薄弱,不可能也没有必要在每一台客户机上存放大量资源。为节约资源,提高利用率和使用效率,让服务器上的资源公有,让多个客户端共享这些资源。,(2)异步性 客户
6、机/服务器模式可以很好地支持异步性操作,方便远程通信的实现。,15.1.1 客户机/服务器模型,15.1.2 网络协议,通俗地说,网络协议就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地进行交流。从专业角度定义,网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。,。,1、什么是网络协议?,15.1.2 网络协议,1984年,国际标准组织ISO公布了一个作为未来网络协议指南的模型,该模
7、型被称为开放系统互联模型OSI。虽然完全遵守OSI的网络产品并没有成为网络市场上的标准,但OSI还是可以提供一个概念上和功能上的框架,可以作为学习网络知识的依据,作为网路实现的参考。,2、ISO/OSI参考模型,15.1.2 网络协议,OSI参考模型采用分层结构,将所有互联的开放系统划分为功能上相对独立的七层,从最基本的物理连接到最高层次的应用。关于OSI参考模型的详细知识见附带文件1。,15.1.2 网络协议,虽然OSI参考模型的实际应用意义不是很大,但它对于理解网络协议内部的运作的确很有帮助,也为我们学习网络协议提供了一个很好的参考。在现实网络世界里,TCP/IP协议栈获得了更为广泛的应用
8、。,TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。,15.1.2 网络协议,3、TCP/IP协议模型,TCP/IP协议是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。,15.1.2 网络协议,TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控
9、制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。关于TCP/IP协议的基础知识见附带文件1。,15.1.2 网络协议,15.1.2 网络协议,3、UDP协议,User Data Protocol用户数据报协议UDP与TCP/IP的差异:UDP直接利用IP协议进行UDP数据报的传输。UDP提供的是无连接的、不可靠的数据报投递服务。UDP常用于数据量少的数据传输,当使用UDP协议传输信息流时,用户负责解决排序、差错确认等问题。,网络编程方法
10、,15.2 网络应用程序编写,网络编程的概述,Socket,WinSocket,RPC,命名管道邮箱,1.什么是Socket?,网络编程的概述,一、Socket,套接字(Socket)最初是由加利福尼亚大学Berkeley分校为UNIX操作系统开发的网络通信接口。20世纪80年代初,加利福尼亚大学Berkeley将美国国防部高研署提供的TCP/IP集成到Unix中,并很快开发了TCP/IP应用程序接口(API),即Socket(套接字)接口。随着UNIX操作系统的广泛使用,套接字成为当前最流行的网络通信应用程序接口之一。,网络编程的概述,90年代初,由Sun Microsystems,JSB
11、Corporation,FTP software,Microdyne和Microsoft等几家公司共同制定了一套标准,即Windows Sockets规范。它是Berkeley Sockets的重要扩充,主要体现在它增加了一些异步函数和符合Windows消息驱动特性的网络事件异步选择机制。Windows Sockets规范是一套开放的、支持多种协议的Windows下的网络编程接口。目前实际应用中的Windows Sockets规范主要有1.1版和2.0版,其中1.1版只支持TCP/IP协议,而2.0版支持多协议,并具有良好的向后兼容性。,网络编程的概述,Socket实际上是指一个通信端点,借助
12、于它,用户所开发的Socket应用程序,可以通过网络与其它Socket应用程序进行通信。套接字sockets是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。它构成了在单个主机内及整个网际间的编程界面。,网络编程的概述,一般来说,跨机应用进程之间要在网络环境下进行通信,必须要在网络的每一端都要建立一个套接字,两个套接字之间可以是建立连接的,也可以是无连接的,并通过对套接字的“读”、“写”操作实现网络通信功能。像文件那样有打开、读、写、关闭的方式。,网络编程的概述,2.套接字Socket的分类,根据传输数据类型的不同,套按字可分为面向连接的字节流
13、套接字(stream sockets)和面向无连接的数据报套接字(datagram sockets)两种类型。,网络编程的概述,提供没有记录边界的数据流,字节流不按记录定界:可以是双向的字节流(应用程序是全双工:可以通过套接字同时传输和接收)。可依赖流传递有序的、不重复的数据。(“有序”指数据包按发送顺序送达。“不重复”指一个特定的数据包只能获取一次。)这能确保收到流消息,而流非常适合处理大量数据。,1)字节流套接字,网络编程的概述,在TCP/IP协议簇中对应TCP协议。,通信端点使用TCP对应的INTERNET地址互相连接,可保证按正确的顺序以及单一和可靠的地址传输数据。,包长没有限制,信包
14、的传输也不重复。,网络编程的概述,2)数据报套接字,数据报套接字支持双向数据流,此数据流不能保证按顺序和不重复送达。,在TCP/IP协议簇中对应UDP协议。,通信端点使用UDP对应的INTERNET地址。不能保证所有数据都准确有序地到达目的地。不保证顺序性、可靠性和无重复性。,网络编程的概述,利用数据报服务可实现一些简单的网络服务,如网点检测程序PING。由于不建立连接,数据报协议的连接比字节流协议快。,双方不需要互连,按固定的最大长度进行传输,因而适用于单个报文传输,或较小文件的传输。,网络编程的概述,3.套接字Socket的编程要点和过程,不论是哪种套接字编程,采用的都是客户机/服务器方式
15、,其运作过程基本类似。,字节流套接字的服务进程和客户进程,在通信前必须创建各自的套接字以建立连接,然后对相应的套接字进行“读”、“写”操作,实现信息的交换。,网络编程的概述,1)服务器进程创建套接字,服务进程总是先于客户进程启动,服务进程首先调用socket()函数创建自已端的一个字节流套接字,并提供三个参数:网络地址类型,一般取AF_INEF;套接字类型,这里取SOCK_STREAM;网络协议,缺省为TCP/IP协议,对应参数为0。,网络编程的概述,给套接字地址变量赋初值。在生成套接字后,要用服务器的地址先对sockaddr_in结构变量赋初值。sockaddr_in在/usr/includ
16、e/netinet/in.h中有定义,它只适用于INTERNET地址类型,含有INTERNET套接字地址类型、IP端口号、IP地址等信息。地址类型可取定为AF_INET,IP地址对服务器可取任意合法地址 INADDR_ANY。IP端口号可由用户设定,但要注意主机字节顺序向网络字节顺序的转换。,网络编程的概述,给套接字命名。由socket()函数创建的套接字是没有名字的。所谓命名,就是用bind()函数将服务器地址捆绑到创建的套接字上。,服务器进程准备接受来自客户机的连接请求。首先调用listen()函数,让服务器进程进入监听状态;然后调用 accept()函数,准备接受客户机的连接信号。无连接
17、请求时,服务进程被阻塞。,网络编程的概述,2)客户进程调用socket()函数创建自己端的套接字,给客户端的sockaddr_in结构体变量赋值。地址类型仍可取AF_INET,端口号和服务器方的端口号相同,欲连服务器的地址通过调用inet_addr()转换得到。也可通过gethostbyname()函数将名字转换为指向hostent结构变量的指针,再将hostent结构变量的地址成员用bcopy()复制到sockaddr_in结构变量上。,网络编程的概述,客户方调用connect()函数向服务进程发出连接请求。,3)当连接请求到来后,被阻塞服务进程的accpet()函数生成一个新的字节流套接字
18、,并返回客户机的sockaddr_in结构变量,从而在服务器应用程序中用新的被赋予客户机地址的套接字同客户进程进行连接,然后向客户方返回接受信号。,网络编程的概述,4)一旦客户机的套接字收到来自服务器的接受信号,则表示客户机与服务器双方已实现连接。任一方均可向对方发送,也可接收对方发来的数据。这既可通过send()、recv()函数来实现。也可通过read()、write()函数来交换数据。,网络编程的概述,5)服务进程和客户进程可通过调用shutdown()和colse()关闭套接字上的所有发送和接收操作,撤销套接字并中断连接。,整个运作过程用图表示如下:,WinSocket同时支持字节流套
19、接字和数据报套接字。面向连接的字节流套接字的时序图见图6-3;面向无连接的数据报套接字的时序图见图6-4。,网络编程的概述,4.WinSocket,1)Creat 功能:建立套接字。函数原型及参数说明:P149-150,网络编程的概述,5.MFC的CSocket类,2)Bind 功能:建立套接字端口与网络地址连接起来。函数原型及参数说明:P150,网络编程的概述,3)Listen 功能:等待Socket请求。函数原型及参数说明:P149-150,4)Accept 功能:取得对列上的第一个连接请求,并建立一个具有与Socket相同特性的套接字。函数原型及参数说明:P150,网络编程的概述,5)C
20、onnect 功能:向服务器提出一个连接请求。函数原型及参数说明:P150,6)Receive 功能:从已连接的客户端或服务器端接收数据。函数原型及参数说明:P150151,网络编程的概述,7)Send 功能:发送数据到已连接的客户端或服务器端。函数原型及参数说明:P151,8)其他函数:Attach Detach GetLastError ShutDown OnAccept Close IsBlocking FromHandle CancelBlockingCall,1)利用CSocketFile类和Archive类实现。,网络编程的概述,15.利用CSocket类直接进行数据通信的两种方式
21、,2)利用CSocket类的成员函数Receive、Send、ReceiveFrom、Sendto、Listen、Accept等实现。,网络编程的概述,方法2)的实现步骤:服务器端:Construct-Create-Bind-Listen-Accept-Send-Close客户机端:Construct-Create-Connect-Receive-Close,.创建应用程序的基本框架,客户机端的编程实例,.修改资源,.增加一个类,.实现网络功能,.几个重要函数的详细代码,服务器端的编程实例,.创建应用程序的基本框架,.修改资源,.增加两个类,.实现网络功能,.相关函数的实现,浏览器和MAPI的
22、编程实例,1.浏览器的编程实例,URL:统一资源定位符(Uniform Resource Locator),URL是统一的,因为它们采用相同的基本语法,无论寻址哪种特定类型的资源(网页、新闻组)或描述通过哪种机制获取该资源。,对于Intranet服务器或万维网服务器上的目标文件,可以使用“统一资源定位符(URL)”地址(该地址以“http:/”开始)。例如,为 Microsoft 网站的万维网 URL 地址。,浏览器和MAPI的编程实例,URL的一般格式为:scheme:/host:port/path?query#fragment 例如:http:/:80/WebApplication1/We
23、bForm1.aspx?name=tomage=20#resumescheme,浏览器和MAPI的编程实例,host,主机,指定的服务器的域名系统(DNS)主机名或 IP 地址。port,端口号,整数,可选,省略时使用方案的默认端口,如http的默认端口为80。path,路径,由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。,浏览器和MAPI的编程实例,query,查询,可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“”符号隔开,每个参数的名和值用“=”符号隔开。fragment,信息
24、片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。,浏览器和MAPI的编程实例,MAPI:Messaging Application Programming Interface,.MAPI的编程实例,浏览器和MAPI的编程实例,MAPI是一种消息体系结构,可以使多个系统进行信息交换,也可以发送和接收电子邮件。MAPI可以在不同的操作系统上进行通信,也可以在多个硬件平台之间实现跨越。,浏览器和MAPI的编程实例,微软和其它一些公司开发了MAPI,可使Windows 应用程序接入到从Microsoft Mail 到Novell MH
25、S的多种消息系统。但是,MAPI仅限于在日常工作的水平上工作,即感知邮件的应用程序,它可在网络上交换邮件与数据。,Visual C+中的CDocument类提供了对MAPI的支持。但只提供发送消息和文件的功能,其他功能如检索等还没有实现。发送消息和文件的功能是通过使用OnFileSendMail()函数和对应的用户接口处理函数OnUpdateFileSendMail()函数实现的。,浏览器和MAPI的编程实例,15.3 DHTML,DHTML:Dynamic HyperText Markup Language 动态超文本标记语言,很多网页(如新浪)上有一个重要界面特性当浏览者将鼠标指针移动到页
26、面导航条上时,会动态地弹出一个菜单,在该菜单中移动鼠标,所指向的菜单项变为红色显示;如果将鼠标指针移出菜单所在范围,则菜单自动隐藏:如果将鼠标指针移动到导航条上另外一个区域,则会弹出另外一个菜单。,15.3 DHTML,这种效果非常类似于Windows应用程序的特性,即通过图形化的界面为用户提供尽可能多的功能。实际上,采用这种方式可以使同一个页面上包含更多的信息,对于庞大的网络站点来说十分有用。,要实现这种效果,单纯依靠HTML和JavaScript已经无法实现,必须采用新的技术这就是动态HTML。所谓动态HTML(Dynamic HTML,简称DHTML),其实并不是一门新的语言,它只是HT
27、ML、CSS和客户端脚本的一种集成。,15.3 DHTML,使用DHTML技术,可使网页设计者创建出能够与用户交互并包含动态内容的页面。实际上,DHTML使网页设计者可以动态操纵网页上的所有元素甚至是在这些页面被装载以后。利用DHTML,网页设计者可以动态地隐藏或显示内容、修改样式定义、激活元素以及为元素定位。DHTML还可使网页设计者在网页上显示外部信息,方法是将元素捆绑到外部数据源(如文件和数据库)上。,15.3 DHTML,可见,DHTML技术是一种非常实用的网页设计技术。实际上,DHTML早已广泛地应用到了各类大大小小的网站中,成为高水平网页必不可少的组成部分。,所有这些功能均可用浏览
28、器完成而无需请求Web服务器,同时也无需重新装载网页。这是因为一切功能都包含在HTML文件中,随着对网页的请求而一次性下载到浏览器端。,15.3 DHTML,一、是HTML,也就是页面中的各种页面元素对象,它们是被动态操纵的内容;二、是CSS,CSS属性也是动态操纵的内容,从而获得动态的格式效果;三、是客户端脚本(例如JavaScript),它实际操纵Web页上的HTML和CSS。,DHTML建立在原有技术的基础上,可分为三个方面:,15.3 DHTML,CSS就是一种叫做样式表(stylesheet)的技术。也有的人称之为层叠样式表(Cascading Stylesheet)。在主页制作时采
29、用CSS技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制。只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和格式。,什么是CSS?,DHTML对象模型,什么是HTML?,HTML(Hyper Text Mark-up Language)即超文本标记语言,是WWW的描述语言。设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。我们只需使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关
30、的内容上去,而这些信息可能存放在网络的另一台电脑中。,DHTML对象模型,HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。,HTML是一种ASCII标记语言的格式。HTML基本代码见P166。HTML只不过是组合成一个文本文件的一系列标签。HTML标签通常是英文词汇的全称(如块引用:blockquote)或缩略语(如“p”代表Paragragh)。,但它们的与一般文本有区别,因为它们放在单书名号里。故Paragragh标签是,块引用标签是。有些标签说明页面如何被格式化(例如,开始一个新段落),其他则说明这些词如何显示(
31、使文字变粗)还有一些其他标签提供在页面上不显示的信息例如标题。,DHTML对象模型,关于标签,需要记住的是,它们是成对出现的。每当使用一个标签如,则必须以另一个标签将它关闭。注意“blockquote”前的斜杠,那就是关闭标签与打开标签的区别。但是也有一些标签例外。比如,标签就不需要。,DHTML对象模型,基本HTML页面以标签开始,以结束。在它们之间,整个页面有两部分标题和正文。标题词夹在和标签之间这个词语在打开页面时出现在屏幕窗口的最上面。正文则夹在和之间即所有页面的内容所在。页面上显示的任何东西都包含在这两个标签之中。,DHTML对象模型,DHTML对象模型,DHTML模型的基本层次:P
32、167,Visual C+通过MFC和ATL来支持DHTML。DHTML对象模型通过一套带有IHTML的COM对象来面向Visual C+的开发者。,DHTML对象模型,ATL,Active TEmplate Library活动模板库,是一种微软程序库,支持利用C+语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等等控件。,什么是ATL?,DHTML对象模型,由Inline信息服务公司开发的iHTML,是套HTML扩展工具,通过iHTML DLL解释执行,它作为一个API应用程
33、序,直接同服务器连接。iHTML提供了超过30个新的HTML函数,包括ODBC支持和20个环境变量。iHTML可在Windows NT,Netscape和 Process Web 服务器上运行。,什么是IHTML?,DHTML对象模型,英文为Component Object Model,亦称“组件对象模型”,是微软对于网页服务器与客户端、加载宏与Office系列软件之间互动的一项软件组件技术。自动化是指应用程序的COM化来让外部可以调用它们的功能,以及外部调用这些功能的方法。自动化的典型应用是微软的很多软件中都支持的宏。由于自动化普遍使用OLE的标准接口来实现,所以这个技术有时也称OLE自动化。,什么是COM?,