- 1、本文档共91页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程实用教程第二版_第2篇 章套接字网络编程基础.ppt
第2章 套接字网络编程基础; 站在应用程序实现的角度,应用程序如何方便地使用协议栈软件进行通信呢?
;套接字应用程序编程接口是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(Socket API)。;加州大学伯克利(Berkley)分校开发并推广了一个包括TCP/IP互联协议的UNIX,称为BSD UNIX(Berkeley Software Distribution UNIX)操作系统,套接字编程接口是这个操作系统的。
后来的许多操作系统并没有另外搞一套其它的编程接口,而是选择了对于套接字编程接口的支持。
由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为Berkeley Sockets规范。; 1)Windows系统
微软公司以UNIX操作系统的Berkeley Sockets规范为范例,定义了Windows Socktes规范,全面继承了套接字网络编程接口。详细内容将在第三章介绍。
;在UNIX系统的实现中,套接字是完全与其他I/O集成在一起的。操作系统和应用程序都将套接字编程接口也看作一种输入/输出机制。
但是,用户进程与网络协议的交互作用实际要比用户进程与传统的I/O设备相互作用要复杂得多。;2.2 套接字编程的基本概念
;我们应当从多个层面来理解套接字这个概念的内涵。
1)从套接字所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程序与网络协议栈进行交互的接口。 ;2)从实现的角度来讲,非常复杂。套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。
3)从使用的角度来讲,非常简单。对于套接字的操作形成了一种网络应用程序的编程接口(API)。
本书把这一套操作套接字的编程接口函数称作套接字编程接口,套接字是它的操作对象。
总之,套接字是网络通信的基石。 ; 1.通信域
套接字存在于通信域中,通信域是为了处理一般的进程通过套接字通信而引入的一种抽象概念,套接字通常只和同一域中的套接字交换数据。
如果数据交换要穿越域的边界,就一定要执行某种解释程序。
现在,仅仅针对Internet域,并且使用Internet协议族(即TCP/IP协议族)来通信。;2.套接字具??三种类型
每一个正被使用的套接字都有它确定的类型,只有相同类型的套接字才能相互通信。
(1)数据报套接字(Datagram SOCKET)
数据报套接字提供无连接的不保证可靠的独立的数据报传输服务。在Internet通信域中,数据报套接字使用UDP数据报协议形成的进程间通路,具有UDP协议为上层所提供的服务的所有特点。;图2.3 在Internet通信域中,数据报套接字基于UDP协议 ;(2) 流式套接字(Stream SOCKET)
流式套接字提供双向的、有序的、无重复的、无记录边界的可靠的数据流传输服务。在Internet通信域中,流式套接字使用TCP协议形成的进程间通路,具有TCP协议为上层所提供的服务的所有特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接,如图2.4所示。 ;图2.4 在Internet通信域中,流式套接字基于TCP协议;(3) 原始式套接字(RAW SOCKET);3.套接字由应用层的通信进程创建,并为其服务
就是说,每一个套接字都有一个相关的应用进程,操作该套接字的代码是该进程的组成部分。;4.使用确定的IP地址和传输层端口号;(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。
(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。 ;2.2.4 套接字使用的数据类型和相关的问题
1.三种表示套接字地址的结构
在套接字编程接口中,专门定义了三种结构型的数据类型,用来存储协议相关的网络地址,在套接字编程接口的函数调用中要用到它们。;2.2.4 套接字使用的数据类型和相关的问题;(2)sockaddr_in结构,专门针对Internet通信域,存储套接字相关的网络地址信息,例如IP地址,传输层端口号等信息。
struct sockaddr_in
{
short int sin_family; // 地址家族
unsigned short int sin_port; // 端口号
struct in_addr sin_addr
文档评论(0)