网络编程第2讲Socket网络编程基础.pptVIP

  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文档。上传文档
查看更多
6.读/写套接字READ()和WRITE() int READ( int sockfd, void* buffer, int len ) int WRITE( int sockfd, void* buffer, int len ) 入口参数: Sockfd:要读/写的套接字描述符,在客户机端是请求套接字,在服务器端是响应套接字; Buffer:指向内存中用来存放数据的读写缓冲区,读套接字时存放从套接字接收到的数据,写套接字的时候存放要发送的数据; Len:读写缓冲区的长度。 返回值: 对于read()返回实际读到的字符数。 7.发送 SEND() 和接收 RECV() int SEND( int sockfd, char* buf, int len, int flags ); int RECV( int sockfd, char* buf, int len, int flags );? 入口参数: sockfd:用来发送/接收数据的套接字描述符,可以是由SOCKET()创建的,也可以是ACCEPT()返回的; buf:用于发送/接收数据的缓冲区指针; len:发送或接收的字符数; flags:执行本调用的方式,一般置为0. 返回值: 处理错误,返回-1; 如果正确,对于发送返回实际发送出去的字节数;对于接收返回实际读入缓冲区的字节数。 说明: 和read、write一样,必须用于已连接的套接字,无需调用者指明目的地参数。 8.关闭套接字CLOSE() int CLOSE( int sockfd ); 入口参数: sockfd:要关闭的套接字描述符。 说明: 如果是面向连接的,CLOSE在关闭套接字前先终止连接; 关闭一个套接字意味着立即终止对它的使用,描述符被释放,以防止应用程序发送或接收更多的数据。 关于阻塞的问题 图2.7 服务器进程因调用ACCEPT()而被阻塞 2.3.4 进程的阻塞问题和对策 1.什么是阻塞 阻塞:是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。 图2.8 RECV()函数的两种执行方式 2.能引起阻塞的套接字调用 在Berkeley套接字网络编程接口的模型中,套接字的默认行为是阻塞的,具体地说,在一定情况下,有多个操作套接字的系统调用会引起进程阻塞。 (1)ACCEPT() (2)READ()、RECV()和READFORM() (3)WRITE()、SEND()和SENDTO() (4)CONNECT() (5)SELECT() (6)CLOSESOCKET() 图2.9 采用阻塞工作模式的服务器不能很好地为多个客户服务 3.阻塞工作模式带来的问题 采用阻塞工作模式的单进程服务器,不能很好地同时为多个客户服务的。图2.9是一个例子。 2.4 无连接的套接字编程 2.4.1 无连接的套接字编程的两种模式 使用数据报套接字开发网络应用程序,既可以采用客户/服务器模式,也可以采用对等模式。 图2.10 对等模式的数据报套接字的编程模型 1.对等模式 对等模式无连接套接字特点: 应用双方是对等的:要经过4个阶段,创建套接字、绑定套接字、发送/接收数据、关闭套接字; 双方都必须确切知道对方的网络地址,并在各自的进程中将约定好的网络地址绑定到自己的套接字上; 每一次传递数据时,在sendto和recvfrom系统调用中必须包含对方的网络地址信息; 进程也会因为发送或接收数据而发生阻塞。 2.客户/服务器模式 图2.11 C/S模式的数据报套接字的编程模型 C/S模式无连接套接字特点: 应用双方不是对等的:服务器要先启动,被动等待访问,要经过创建套接字、绑定套接字、发送/接收数据、关闭套接字4个阶段,将套接字绑定到众所周知的端口上; 客户机套接字使用动态分配的自由端口上,不需要进行绑定; 客户机主动请求服务,并在数据报中携带双方的地址; 服务器可以接受多个客户端的数据。 2.4.2 两个专用的系统调用 1.发送数据报SENDTO() int SENDTO( int sockfd, const void* msg, int len, unsigned int flags, struct sockaddr* to, int tolen); 入口参数: Sockfd:发送方的描述符,包含发送方的网络地址; msg:字符串指针,指向发送缓冲区; len:发送缓冲区长度; Flags:发送方式,一般为0; To:指向sockaddr结构的指针,包含接收方的网络地址; Tolen:sockaddr的结构长度。 返回值:成功返回发送字节数,失败返回-1. 2.接收数据报

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档