- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 网络编程(VC) 重庆三峡学院 数学与计算机科学学院 本章主要内容 1、套接字编程原理 2、基本的Windows Sockets API编程 3、MFC下的Socket编程的类 4、一个使用CSocket类的网络通信实例 1.套接字编程原理 一个完整的网络通信进程需要由两个进程组成,并且只能用同一种高层协议。 也就是说,不可能通信的一端用TCP,而另一端用UDP。 一个完整的网络通信需要一个五元组来标识:协议、本地地址、本地端口号、远端地址、远端端口号。 1.1 Client/server通信模型 在客户/服务器模式中我们将请求服务的一方称为客户端(client),将提供某种服务的一方称为服务器(server)。 一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说服务进程一直处于休眠状态,直到一个客户端对这个服务的地址提出了连接请求。 在这个时刻,服务程序被“惊醒”并且为客户端提供服务—对客户端的请求作出适当的反应。 虽然基于连接的服务是设计客户端/服务器应用程序的标准,但有些服务也是可以通过无连接的接口提供的。 客户端/服务器的请求/响应过程示意图如下所示。 通过上面的分析,我们不难理解一个一个完整的网络应用程序包括客户端和服务器两个部分。 客户端与服务器进程的作用是非对称的,因此编码不同。 服务进程一般是等待客户端请求而启动的,只要系统运行,该服务进程一直存在,直到终止或强迫终止。 1.2 Windows Sockets规范 Windows Sockets 规范是90年代初Microsoft公司联合其他几家大公司共同制定的一套在Windows下的二进制兼容网络编程接口规范。 它以U.C.Berkeley大学BSD UNIX中流行的Socket接口为基础,主要在其上扩充了一组针对Windows的扩展库函数,增加了符合Windows消息驱动特性的网络事件异步选择机制,以使程序员能够充分利用Windows消息驱动机制进行编程。 Windows Sockets 的用途是将基础网络抽象出来,这样,您不必对网络非常了解,并且您的应用程序可在任何支持套接字的网络上运行。 它为应用程序开发者定义了一套简单统一的API,并让各家网络软件供应商共同遵守。 MFC提供了两个类用以封装Windows Sockets API。 一个是CAsyncSocket类,它主要是提供给那些具有一定网络编程经验,希望同时拥有Socket API编程的灵活性和类库编程便利性的开发者。 另一个是CSocket类,它由CAsyncSocket类派生,它具有更高的抽象化,致力于简化网络编程所需的操作。 1.3 套接字(Socket)1.3.1 套接字定义 套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点。 简单的说,套接字就是通信两方的一种约定,用套接字中的相关函数来完成通信过程。 使用套接字的应用程序间通信模型如图2所示。 1.3.2分类 可用的套接字类型有以下两种: 流式套接字 数据报套接字 流式套接字 流式套接字提供没有记录边界的数据流,即字节流。字节流能确保以正确的顺序无重复地被送达。 数据报套接字 数据报套接字支持面向记录的数据流,但不能确保能被送达,也无法确保按照发送顺序或不重复。 1.3.3 套接字的作用 套接字的作用非常大,至少在下面三种通信上下文中如此: 客户端/服务器模型。 对等网络方案,如聊天应用程序。 通过让接收应用程序将消息解释为函数调用来进行远程过程调用 (RPC)。 1.3.4端口与地址 在网络上,一个套接字的标识主要借助于地址和端口来描述。 套接字的地址指该套接字所在计算机的网络地址,可以为域名或IP地址的形式。 通常,创建套接字时不必指明网络地址,只有在拥有多个网络地址的机器时,才需要显式指定一个网络地址。 同一机器上可以运行多个网络应用程序,每个应用程序都有自己的套接字用以进行网络通信,此时如果只有地址标识套接字,则当一个通信包到达机器时,将无法确定究竟是哪个应用程序的套接字需要接收此信息。 由此增加了端口的概念,以协助区分同一机器上不同应用程序的套接字。 端口用于标识进程,同一机器上不同的网络应用程序各有不同的端口,这样,通过“网络地址+端口号”的标识方法,便唯一标识了机器上的应用程序了。 某些端口是专门为公共服务保留的(ftp:21,http:80),除非程序是要提供这些服务,否则应尽量避免使用这些端口。 一般来说,端口1024以前的端口号都是系统保留的或是作为公共服务的,应尽量选择大于1024的端口号,以避免冲突。 2、基本的Windows Sockets API编程 需要在程序中添加下面的包
文档评论(0)