网络编程第2讲Socket网络编程基础.ppt
《网络编程第2讲Socket网络编程基础.ppt》由会员分享,可在线阅读,更多相关《网络编程第2讲Socket网络编程基础.ppt(47页珍藏版)》请在三一办公上搜索。
1、第2讲 Socket网络编程基础,套接字网络编程接口的产生与发展过程套接字编程的基本概念套接字的特点、应用场合、使用的数据类型面向连接的套接字编程套接字的工作过程、系统调用、编程实例借助实例分析进程的阻塞问题和对策无连接的套接字编程无连接套接字编程的两种模式(C/S和对等)数据报套接字的对等模式编程实例,2.1 套接字网络编程接口的产生与发展,2.1.1 问题的提出应用程序与协议软件进行交互时须说明许多细节:是服务器还是客户机,主动还是被动通信?发送方需说明发送的数据;接收方需说明接收的数据如何存放。站在应用程序实现的角度,应用程序如何方便地使用协议栈软件进行通信呢?如果能在应用程序与协议栈软
2、件之间提供一个软件接口,就可以方便客户与服务器软件的编程。UNIX最早将TCP/IP协议簇集成到内核中,UNIX的开发者提出并实现了套接字应用编程接口。,套接字应用程序编程接口:是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(Socket API)。定义了应用程序与协议栈软件进行交互时可以使用的一组操作,决定了应用程序使用协议栈的方式、应用程序所能实现的功能、以及开发具有这些功能的程序的难度。套接字编程接口给出了应用程序能够调用的一组过程,以及这些过程所需的参数,每个独立的过程完成一个与协议栈软件交互的基本操作(如:建立连接、接收数据、
3、释放链接)。,2.1.2 套接字编程接口的起源与应用加州大学伯克利分校开发了一个包括TCP/IP协议簇的BSD UNIX,并迅速得到推广,套接字编程接口是这个操作系统一部分。TCP/IP标准并没有定义应用程序用来与该协议进行交互的应用程序编程接口,只规定了应该提供的一般操作,并允许各个操作系统去定义用来实现这些操作的具体API。一个协议标准可能只是建议某个操作在应用程序发送数据时是需要的,而由应用程序编程接口来定义具体的函数名和每个参数的类型。,尽管协议标准允许操作系统设计者开发自己的应用程序编程接口,但由于BSD UNIX的广泛使用,后来的许多操作系统及编程语言都选择了对套接字编程接口的支持
4、。由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为Berkeley Sockets规范。Berkeley Sockets规范规定了一系列与套接字使用有关的库函数,为在UNIX操作系统下不同计算机中的应用程序进程之间,使用TCP/IP协议簇进行网络通信提供了一套应用程序编程接口。,2.1.3 套接字编程接口的两种实现方式采用两种实现套接字编程接口的方式:在操作系统的内核中增加相应的软件来实现;通过开发操作系统之外的函数库来实现。在BSD UNIX及起源于它的操作系统中,套接字函数是操作系统本身的功能调用,是操作系统内核的一部分。其他操作系统供应商为了不修改基本操作系统,开发了套
5、接字库(Socket Library)来提供套接字编程接口。套接字库中的每个过程具有与UNIX套接字函数相同的名字与参数,向没有本机套接字的操作系统上的应用程序提供套接字编程接口。,套接字库与操作系统内核中实现的套接字在语义上是相同的。应用程序调用套接字过程不必管它是由操作系统内核过程提供的,还是由库过程提供的。这种方式提供了程序的可移植性:将程序从一台计算机移植到另一台计算机时,程序的源代码不需改动,只要用新计算机上的套接字库重新编译即可。套接字库与操作系统直接提供的本机套接字编程接口在实现上是不同的。套接字库的过程需要链接到应用程序中;并驻留于应用程序地址空间;调用时控制从应用程序转向库程
6、序,并进一步调用一个或多个底层操作系统的功能调用。,2.2 套接字编程的基本概念,图2.1 电插座与电话插座的作用,2.2.1 什么是套接字(SOCKET),套接字是对网络中不同主机上应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。,图2.2 应用进程、套接口、网络协议栈及操作系统的关系,两个应用进程只要分别连接到自己的套接字,就可以通过网络痛惜,不用去管复杂的网络结构及数据传输过程。,从多个层面来理解套接字这个概念的内涵从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程
7、序与网络协议栈交互的接口.从实现的角度来讲,非常复杂。套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。从使用的角度来讲,非常简单。对套接字的操作形成了一种网络应用程序的编程接口(API),提供了一组系统调用或库函数,可以用于构造套接字、安装绑定套接字、连接套接字、通过套接字交换数据、关闭套接字,实现各种分布式应用。套接字编程接口是一套操作套接字的编程接口函数,套接字是它的操作对象。,2.2.2 套接字的特点1通信域通信域:是一个计算机网络的范围,在这个范围中,所有的计算机使用同一种网络体系结构及协议栈。套接字存在于通信域中。套接字通常只和同一域中的套接字交换
8、数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。这里,仅仅针对Internet域,并且使用Internet协议族(即TCP/IP协议族)来通信。,2套接字具有三种类型每一个正被使用的套接字都有它确定的类型。只有相同类型的套接字才能相互通信。(1)数据报套接字(Datagram SOCKET)数据报套接字提供无连接的、不保证可靠的、独立的数据报传输服务。在Internet通信域中,数据报套接字使用UDP数据报协议形成的进程间通路,具有UDP协议为上层所提供的服务的所有特点。一般用于轻载通信,并具有多播通信的能力。,图2.3 在Internet通信域中,数据报套接字基于UDP协议,(2
9、)流式套接字(Stream SOCKET)流式套接字提供双向的、有序的、无重复的、无记录边界的可靠的数据流传输服务。在Internet通信域中,流式套接字使用TCP协议形成的进程间通路,具有TCP协议为上层所提供的服务的所有特点。在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接。一般用于交换大批量的数据时,或者要求数据按照发送的顺序无重复的到达目的地的时候。,图2.4 在Internet通信域中,流式套接字基于TCP协议,(3)原始式套接字(RAW SOCKET)原始式套接字允许对较低层次的协议(如IP、ICMP)直接访问,用于检验新协议的实现。原始套接字保存了数据包中的完
10、整IP头;前面两种套接字只能收到用户数据;因此可以通过原始套接字对数据进行分析。,2.2.3 套接字的应用场合并非所有的网络应用编程都要使用套接字。套接字适合开发具有如下特点的新网络应用。不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。套接字编程层次较低,自由度较大。,2.3 面向连接的套接字编程,2.3.1 套接字的工作过程面向连接的通信方式基于TCP,必须借助流式套接字来编程,应用服务器分为服务器端和客户端,双方是不对称
11、的,需要分别编程。双方首先要创建并安装套接字,做好准备;建立连接,采用三次握手的方式;数据交换,称为客户机与服务器的会话期,会话的内容必须遵守一定的格式和顺序;释放连接。下面介绍面向连接的服务器和客户端的编程步骤.,2.3.2 套接字编程接口的系统调用1创建套接字SOCKET()创建一个套接字,并返回一个整型描述符:int SOCKET(int Protofamily,int Type,int Protocol);入口参数:Protofamily:套接字使用的协议簇,一般为PF_INET,表示TCP/IP协议簇,PF_DECnet表示DEC协议。type:套接字类型,SOCK_STREMA表示
12、创建面向连接的流传输的流式套接字;SOCK_DGRAMA表示创建无连接的面向消息的数据报套接字。protocol:套接字使用的传输层网络协议,一般为IPPROTO_IP,internet通信域中一般取值为0。,返回值:套接字创建成功,返回一个int型的整数,即所创建套接字的描述符,指向被维护在操作系统内核里的socket数据结构。套接字创建出错,返回1,表示出错类型的代码保存在全局变量Errno中。举例:int sockfd=SOCKET(PF_INTE,SOCK_STREAM,0)创建套接字时,为其分配了内存,并建立了相应的数据结构,用于指定连接的种类和使用的协议,同时还有关于连接队列操作的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 Socket 基础

链接地址:https://www.31ppt.com/p-6600086.html