socketAPI..docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
socketAPI.

这是我准备的我们班第三次交流学习的内容,由我讲的。主要是关于socket编程的。这些内容只是最基本的、最简单的网络编程方面的内容而且只涉及到了字节流套接字,而且并发服务器编程的内容几乎未涉及,只能是让我们对于网络编程有了一个初步的认识。我对于网络编程并没什么深入的研究,这是我最近看《深入理解计算机系统》这本书,看到了网络编程这一部分的内容,想分享给同学们,所以花了不到两周的时间看了许多关于网络编程的内容,但是下面的文章感觉眼界还是比较窄,涉及的内容也比较单一。结构安排是按照我在学习过程中碰到的一些问题调整的,主要的参考就是《深入理解计算机系统》和《UNIX网络编程》。BSD?Socket API套接字接口的起源80年代初,美国国防部高级研究计划署ARPA让California大学在UNIX操作系统下实现TCP/IP协议,Berkley提出了为UNIX操作系统开发的网络通信接口Socket,它是建立在传输层协议(主要是TCP和IP)上的一种套接字规范,因此人们也将Socket接口称为Berkeley Socket。Socket概念最早出现于1983年的4.2BSD版本中,它的主要目的是提供一个统一的访问网络和进程间通信协议的接口。除了Berkeley Socket外还有Windows Sockets (Winsock) 、Java Sockets、Python sockets、Perl sockets?Linux?所支持的?BSD?套接字类型BSD?套接字类型?描述流(stream)这种套接字提供了可靠的双向顺序数据流,可保证数据不会在传输过程中丢失、破坏或重复出现。流套接字通过?INET?地址族的TCP?协议实现。数据报(datagram)?这种套接字也提供双向的数据传输,但是并不对数据的传输提供担保,也就是说,数据可能会以错误的顺序传递,甚至丢失或破坏。这种类型的套接字通过?INET?地址族的UDP?协议实现。原始(raw)?利用这种类型的套接字,进程可以直接访问底层协议(因此称为原始)。例如,可在某个以太网设备上打开原始套接字,然后获取原始的?IP?数据传输信息。可靠发送的消息?和数据报套接字类似,但保证数据被正确传输到目的端。顺序数据包?和流套接字类似,但数据包大小是固定的。数据包(packet)?这并不是标准的?BSD?套接字类型,它是Linux?专有的?BSD?套接字扩展,可允许进程直接在设备级访问数据包。客户端—服务器模型(ClientServer)几乎每个网络都是基于客户端—服务器模型的,采用这个模型,一个应用是由一个服务器进程和多个客户端进程组成的。服务器管理某种资源并通过操作向客户端提供服务。例如一个浏览器就属于客户端程序,而web服务器、ftp服务器则属于服务器,管理很多磁盘文件。客户端—服务器模型的基本操作是事务,一个客户端—服务器模型由四步组成:当一个客户端需要服务时,它向一个服务器发送一个请求,发起一个事务。服务器收到请求后,解释它并以适当的方式操作它的资源。服务器给客户端发送一个响应,并等待下一个请求。客户端受到响应并处理它。客户端和服务器是进程,不是主机。基本概念端口端口号是一个16bit的整数,它用来区分不同的进程和不同的服务。客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了,客户端口号又称作临时端口号(即存在时间很短暂)。通常服务器的端口号是固定的一些知名端口号,如http是80,telnet是23等。IPIP地址不在多说,都早已不再陌生,需要说明的一点是它是一个unsigned int类型的数据,通常以一种称为点分十进制表示法来表示。它和端口号共同组成了套接字对(socket pair),套接字对唯一的标识了一个网络上的每个TCP连接。它是一个四元组:本地IP、本地TCP端口号、外地IP、外地TCP端口号。套接字(socket)套接字应该是最重要的一个概念,那到底什么是套接字呢?我们通常成一个标识一个端点的两个值IP/port成为一个套接字。从Unix内核的角度来看,一个套接字就是通信的一个端点。从Unix程序的角度来看一个套接字就是一个有相应描述符的打开文件。套接字描述符在socket中会用到套接字描述符,个人觉得这是一个理解socket编程重要概念,为了便于理解,先看一下文件描述符,在linux中所有设备都是被抽象成文件的,对设备的读写都可以看成对文件的读写。文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时。内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。而套接字描述符是一个整数类型的值。每个进程的进程空间里都

文档评论(0)

bhzs + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档