中国UNIX用户协会ChinaUnixUserGroup.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
阻塞和非阻塞 在上面的调用讲解中,我们可以看到accept,read,write经常因为I/O操作而使得进程组塞,设置一个socket描述符为非阻塞的方法flags=fcntl(listensock,F_GETFL,0); flags |= O_NONBLOCK; fcntl(listensock,F_SETFL,flags); 讨论和思考 如何利用已知的知识编写一个简单的网络聊天程序?? 一个后台服务器,两个或者多个客户端,用户可以一对一聊天。 * CUUG 中国UNIX用户协会 China Unix User Group CUUG SOCKET编程讲座 进程安排 Socket概念的总结和回顾 Socket主要调用的进一步讲解 基本的scoket程序举例 阻塞和非阻塞 多路I/O选择-select 带外消息 小结 概念回顾 什么是socket? 大家都知道socket是套接字。 套接字这三个字隐藏了两重概念: 说明这个并不是网络通信本身,它是接在基本的通信网络上的编程接口 套字说明了socket最大的特点:标准化。掩盖了各种不同的具体设备和协议,使得用户不必关心技术细节 网络程序最常用的模型 客户机服务器模型 前置机模型 带外数据: 带外数据是相连的每一对流套接口间一个逻辑上独立的传输通道。带外数据是独立于普通数据传送给用户的,这一抽象要求带外数据设备必须支持每一时刻至少一个带外数据消息被可靠地传送。这一消息可能包含至少一个字节;并且在任何时刻仅有一个带外数据信息等候发送。对于仅支持带内数据的通讯协议来说(例如紧急数据是与普通数据在同一序列中发送的),系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户可以在顺序接收紧急数据和非顺序接收紧急数据之间作出选择(非顺序接收时可以省去缓存重叠数据的麻烦)。在这种情况下,用户也可以“偷看一眼”紧急数据。 广播 数据报套接口可以用来向许多系统支持的网络发送广播数据包。要实现这种功能,网络本身必须支持广播功能,广播信息将会给网络造成极重的负担,因为它们要求网络上的每台主机都为它们服务,所以发送广播数据包的能力被限制于那些用显式标记了允许广播的套接口中。 广播通常是为了如下两个原因而使用的: 一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址又没有任何先验的知识。 2. 一些重要的功能,例如路由要求把它们的信息发送给所有可以找到的邻机。 被广播信息的目的地址取决于这一信息将在何种网络上广播。 Internet域中支持一个速记地址用于广播-INADDR_BROADCAST。由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。 连接和无连接 Socket向应用程序提供client-server形式的面向连接的或无连接的通信服务。对于面向连接的服务,一个公用的server长期监听client的连接请求,有请求时就创建新socket和新进程与client通信。通信结束后新socket和新进程都被关闭。无连接的server行为较简单:client不需要连接请求而直接向server发送数据,server在收到client数据后也是直接处理,不创建新socket及新进程。 SOCKET编程使用的系统调用 int socket (int domain,int type,int protocol); 参数type用来指明通信的类型,现在使用的定义有如下几种: SOCK_STREAM:提供顺序、可靠和基于字节流的双向连接。支持带外数据(out-of-band)传输,对于带外数据,要求发送方在发送缓冲中的数据之前发送带外数据,接收方在处理缓冲之前处理带外数据。 SOCK_DGRAM:支持数据报通信(无连接、不可靠、固定的消息最大长度)。 SOCK_SEQPACKET:提供顺序的、可靠的、基于固定最大长度数据报的有传输路径的双向连接。一个接收者在每次read系统调用时必须读入一个完整的报文(packet)。 SOCK_RAW:提供原始网络协议访问。 SOCK_RDM:提供一个可靠的数据报层,但不保证报文到达的顺序。注意,以上的类型并不是对所有协议族都有效。 protocal: SOCK_STREAM类型是全双工的字节流。一个流类型的socket必须连接以后才能传递数据。 如果一个节点缓冲中的一块数据在一段时间内不能成功发送,那么就认为该连接已经断开,并且给传输数据的调用返回-1,设置错误代码ETIMEOUT。可以使用协议选项强制周期性的传输一个特定信号,以使得socket连接保持活跃,这时如果超出一定时间socket连接没有响应,就产生错误。如果一个进程在一个断开连接的流上发

文档评论(0)

beautyeve + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档