网络编程实用教程第二版_第02章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:100 大小:3.4MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

网络编程实用教程第二版_第02章.ppt

网络编程实用教程第二版_第02章.ppt

预览

免费试读已结束,剩余 90 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第2章UNIX中的套接字网络编程接口2.1.1问题的提出站在应用程序实现的角度,应用程序如何方便地使用协议栈软件进行通信呢?如果能在应用程序与协议栈软件之间提供一个软件接口,就可以方便客户与服务器软件的编程。套接字应用程序编程接口是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(SocketAPI)。它定义了应用程序与协议栈软件进行交互时可以使用的一组操作,决定了应用程序使用协议栈的方式、应用程序所能实现的功能、以及开发具有这些功能的程序的难度。加州大学伯克利(Berkley)分校开发并推广了一个包括TCP/IP互联协议的UNIX,称为BSDUNIX(BerkeleySoftwareDistributionUNIX)操作系统,套接字编程接口是这个操作系统的一个部分。后来的许多操作系统并没有另外搞一套其它的编程接口,而是选择了对于套接字编程接口的支持。由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为BerkeleySockets规范。微软公司以UNIX操作系统的BerkeleySockets规范为范例,定义了WindowsSocktes规范,全面继承了套接字网络编程接口。详细内容将在第三章介绍。Linux操作系统中的套接字网络编程接口几乎与UNIX操作系统的套接字网络编程接口一样。本章着重介绍三大操作系统的套接字网络编程接口的共性问题。要想实现套接字编程接口,可以采用两种实现方式,一种是在操作系统的内核中增加相应的软件来实现,一种是通过开发操作系统之外的函数库来实现。UNIX操作系统对文件和所有其它的输入/输出设备采用一种统一的的操作模式,就是“打开-读-写-关闭”(open-read-write-close)的I/O模式。当TCP/IP协议被集成到UNIX内核中的时候,相当于在UNIX系统中引入了一种新型的I/O操作,就是应用程序通过网络协议栈来交换数据。在UNIX系统的实现中,套接字是完全与其他I/O集成在一起的。操作系统和应用程序都将套接字编程接口也看作一种输入/输出机制。但是,用户进程与网络协议的交互作用实际要比用户进程与传统的I/O设备相互作用要复杂得多。2.2套接字编程的基本概念从实现的角度来讲,非常复杂。套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。从使用的角度来讲,非常简单。对于套接字的操作形成了一种网络应用程序的编程接口(API)。本书把这一套操作套接字的编程接口函数称作套接字编程接口,套接字是它的操作对象。总之,套接字是网络通信的基石。2.2.2套接字的特点1.通信域接字存在于通信域中,通信域是为了处理一般的进程通过套接字通信而引入的一种抽象概念,套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。现在,仅仅针对Internet域,并且使用Internet协议族(即TCP/IP协议族)来通信。2.套接字具有三种类型每一个正被使用的套接字都有它确定的类型,只有相同类型的套接字才能相互通信。(1)数据报套接字(DatagramSOCKET)数据报套接字提供无连接的不保证可靠的独立的数据报传输服务。在Internet通信域中,数据报套接字使用UDP数据报协议形成的进程间通路,具有UDP协议为上层所提供的服务的所有特点。(2)流式套接字(StreamSOCKET)流式套接字提供双向的、有序的、无重复的、无记录边界的可靠的数据流传输服务。在Internet通信域中,流式套接字使用TCP协议形成的进程间通路,具有TCP协议为上层所提供的服务的所有特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接,如图2.4所示。(3)原始式套接字(RAWSOCKET)3.套接字由应用层的通信进程创建,并为其服务就是说,每一个套接字都有一个相关的应用进程,操作该套接字的代码是该进程的组成部分。4.使用确定的IP地址和传输层端口号(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。2.2.4套接字使用的数据类型和相关的问题1.三种表示套接字地址的结构在套接字编程接口中,专门定义了三种结构型的数据类型,用来存储协议相关的网络地址,在套接字编程接口的函数调用中要用到它们。(2)sockaddr_in结构,专门针对Internet通信域,存储套接字相关的网络地址信息,例如IP地址,传输层端口号等信息。structsockaddr