互联网络程序设计第3章.ppt
《互联网络程序设计第3章.ppt》由会员分享,可在线阅读,更多相关《互联网络程序设计第3章.ppt(32页珍藏版)》请在三一办公上搜索。
1、第三章、迭代服务器与客户端,TCP套接字编程基本步骤套接字编程基本函数迭代echo服务器迭代echo客户端测试用例,1.TCP套接字编程基本步骤,TCP套接字基本步骤分为服务器端和客户端两部分:服务器端创建套接字绑定套接字设置套接字为监听模式,进入被动接受连接状态接受请求,建立连接读写数据终止连接客户端步骤创建套接字与远程服务器建立连接读/写数据终止连接,TCP套接字编程(cont.),socket(),bind(),listen(),accept(),read(),write(),close(),socket(),connect(),write(),read(),close(),阻塞直到接收
2、到客户连接请求,TCP服务器端,TCP客户端,2.套接字编程基本函数,bind函数#include int bind(int sockfd,struct sockaddr*addr,socklen_len len)返回:0成功;-1出错该函数用于给传输层的socket分配地址,其深层含义是在分用Packet的时候,协议栈通过检查inpcb中的地址,确定packet应该传送给哪个socket一般而言,服务器调用此函数,而客户则很少调用它。绑定地址时,可以指定地址和端口号,也可以指定其中之一,甚至一个也不指定。通配地址:INADDR_ANY,bind函数(续),另外,需要注意以下几点:参数addr
3、中的相关字段在初始化时,必须是网络字节序;如果由内核来选择IP地址和临时端口号,函数并不返回所选择的值。为了获得这些值,进程必须调用getsockname函数函数bind返回的一个常见错误是:EADDRINUSE,我们可以通过设置套接口选项SO_REUSEADDR。,bind函数的用法,struct sockaddr_in addr;int port=1234;addr.sin_family=AF_INET;=htonl(INADDR_ANY);addr.sin_port=htons(port);if(bind(fd,(struct sockaddr*)&addr,sizeof(addr)=-
4、1)/*错误处理*/,基本套接字函数listen,#include int listen(int sockfd,int backlog)返回:0成功;-1出错;函数listen仅被服务器调用,它完成两件事情:函数listen将未连接的套接字转化成被动套接字,指示内核应接受指向此套接字的连接请求;函数的第二个参数规定了内核为此套接字排队的最大连接个数;对于给定的监听套接字,内核要维护两个队列未完成连接队列已完成连接队列两个队列之和不超过backlog;,listen函数(续),三路握手完成,两队列之和不能超过backlog,已完成连接队列(ESTABLISHED状态),未完成连接队列(SYN_R
5、CVD状态),新到达的SYN分节,服务器,accept,TCP为监听套接口维护的两个队列,Client,Server,SocketConnect(blocks)(active open),Socket,bind,listen(passive open),SYN J,SYN K,ack J+1,ack K+1,Accept returnRead(blocks),Connect return,连接完成,进入已建连队列,RTT,listen函数(续),另外几点说明:不同的实现对backlog有不同的解释,如源自Berkeley的实现将backlog增加一个模糊因子,把它乘以1.5,再作为两个队列之和
6、;不要把backlog定义为0,因为有些实现允许1个连接排队,而有些实现不允许连接排队;当一个客户SYN到达时,若两个队列都是满的,tcp就忽略此分节,且不发送RST。这是因为,这种情况是暂时的,客户tcp将重发SYN,期望不久的将来就能在队列中找到空闲条目。如果发送RST,将会出现?,基本套接字函数accept,#include int accept(int sockfd,struct sockaddr*cliaddr,socklen_t*addrlen);返回:非负描述字OK;-1出错;accept函数由TCP服务器调用;从已完成连接队列头返回下一个已完成连接;如果该队列空,则进程进入睡眠
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 互联网络 程序设计

链接地址:https://www.31ppt.com/p-6405003.html