互联网络程序设计第3章.pptxVIP

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

第三章、迭代服务器与客户端TCP套接字编程基本步骤套接字编程基本函数迭代echo服务器迭代echo客户端测试用例

1.TCP套接字编程基本步骤TCP套接字基本步骤分为服务器端和客户端两部分:服务器端创建套接字绑定套接字设置套接字为监听模式,进入被动接受连接状态接受请求,建立连接读写数据终止连接客户端步骤创建套接字与远程服务器建立连接读/写数据终止连接

TCP套接字编程(cont.)socket()bind()listen()accept()read()write()close()socket()connect()write()read()close()阻塞直到接收到客户连接请求TCP服务器端TCP客户端

2.套接字编程基本函数bind函数#includesys/socket.hintbind(intsockfd,structsockaddr*addr,socklen_lenlen)返回:0-成功;-1-出错该函数用于给传输层的socket分配地址,其深层含义是在分用Packet的时候,协议栈通过检查inpcb中的地址,确定packet应该传送给哪个socket一般而言,服务器调用此函数,而客户则很少调用它。绑定地址时,可以指定地址和端口号,也可以指定其中之一,甚至一个也不指定。通配地址:INADDR_ANY

bind函数(续)另外,需要注意以下几点:参数addr中的相关字段在初始化时,必须是网络字节序;如果由内核来选择IP地址和临时端口号,函数并不返回所选择的值。为了获得这些值,进程必须调用getsockname函数函数bind返回的一个常见错误是:EADDRINUSE,我们可以通过设置套接口选项SO_REUSEADDR。IP地址端口结果通配地址0内核选择IP地址和端口号通配地址非0内核选择IP地址,进程指定端口本地IP0进程指定IP地址,内核选择端口本地IP非0进程指定IP地址和端口号

bind函数的用法 … structsockaddr_in addr; intport=1234; addr.sin_family=AF_INET; =htonl(INADDR_ANY); addr.sin_port=htons(port); if(bind(fd,(structsockaddr*)addr,sizeof(addr))==-1) { /*错误处理*/ }

基本套接字函数-listen#includesys/socket.hintlisten(intsockfd,intbacklog)返回:0-成功;-1-出错;函数listen仅被服务器调用,它完成两件事情:函数listen将未连接的套接字转化成被动套接字,指示内核应接受指向此套接字的连接请求;函数的第二个参数规定了内核为此套接字排队的最大连接个数;对于给定的监听套接字,内核要维护两个队列未完成连接队列已完成连接队列两个队列之和不超过backlog;

listen函数(续)添加标题三路握手完成01添加标题两队列之和不能超过backlog02添加标题已完成连接队列(ESTABLISHED状态)03添加标题未完成连接队列(SYN_RCVD状态)04添加标题新到达的SYN分节05添加标题服务器06添加标题accept07添加标题TCP为监听套接口维护的两个队列08

ClientServerSocketConnect(blocks)(activeopen)Socket,bind,listen(passiveopen)SYNJSYNK,ackJ+1ackK+1AcceptreturnRead(blocks)Connectreturn连接完成,进入已建连队列RTT

listen函数(续)另外几点说明:#2022

基本套接字函数-accept#includesys/socket.hintaccept(intsockfd,structsockaddr*cliaddr, socklen_t*addrlen);返回:非负描述字-OK;-1-出错;accept函数由TCP服务器调用;从已完成连接队列头返回下一个已完成连接;如果该队列空,则进程进入睡眠状态。函数返回的套接字为连接套接字,应与监听套接字区分开来该函数最多返回三个值:一个既可能是新套接字也可能是错误指示的整数,一个客户进程的协议地址(由cliaddr所指),以及该地址的大小(这后两个参数是值-结果参数);也就是说,服务器可以通过参数cliaddr来得到请求连

文档评论(0)

SYWL2019 + 关注
官方认证
文档贡献者

权威、专业、丰富

认证主体四川尚阅网络信息科技有限公司
IP属地四川
统一社会信用代码/组织机构代码
91510100MA6716HC2Y

1亿VIP精品文档

相关文档