Windows Socket编程3.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Using socket calls in a program (1)connect 功能:建立与服务器的连接 定义:  int connect (SOCKET s, const struct sockaddr *FAR name,int namelen) Name:是事先填写好的结构,用于指定所要连接的服务器的地址(Server的IP地址和端口号)。 建立与服务器的连接 (2)Listen 功能:该函数仅被TCP服务端使用,负责通知协议内核用户进程准备接收套接口上的连接请求,它同时也指定了在该套接口上可以排队等待的连接数的门限值.  定义:    int listen(SOCKET s,int backlog) 返回值:没有错误返回0,否则返回SOCKET_ERROR。 接收队列 一个新的Client的连接请求先被放在接收队列中,等待Server程序调用accept函数接受该连接请求. backlog用于指定接收队列的长度,也就是在Server程序调用accept函数之前最大允许进入的连接请求数,多余的连接请求将被拒绝(服务器直接返回TCP-RST),典型取值为5 backlog=待处理连接队列长度=未连接队列长度+已连接队列长度。 服务器忙 (3) accept() accept()函数用于响应客户的连接请求,建立与客户端的连接 产生一个新的socket描述符来描述该连接 这个连接用来与发起该连接请求的Client交换信息 int accept(int sockfd,struct sockaddr *FAR addr,int FAR*addrlen); addr将在函数调用后被填入连接对方(客户端)的地址信息,如对方的IP、端口等。 accept缺省是阻塞函数,如果队列中没有连接请求等待,那么就会使调用方阻塞,直到有一个连接请求到达。 注:第二、三个参数是[INOUT]类型参数。此函数中可输入NULL值。 accept() 调用 例:在服务器端输出已接受连接的对方主机的IP地址(设已创建的套接口为sock)。 (1)定义一用于接收对方地址的地址结构 struct sockaddr_in from; int len=sizeof(from); (2)用accept接收客户端的连接请求 if(accept( sock,(struct sockaddr *)&from,&len)==SOCKET_ERROR) printf(“accept : %d”,WSAGetLastError); (3)如果成功,输出IP地址 else printf(“Requst IP address:%s/n”,inet_ntoa(from.sin_addr)) (4)send 用于TCP协议中发送信息 int send(SOCKET s, const char FAR *buf, int len, int flags); buf:指向待发送信息的指针 Len:待发送的字节数 Flags:发送标志,置0。 函数返回已发送的字节数,返回-1表示出错 send缺省是阻塞函数,直到发送完毕或出错 注意:如果函数返回值与参数len不相等,则剩余的未发送信息需要再次发送 send()例程: ………… Char *msg=“Hey there people”; Int len; /* code to SOCKET create,bind(),listen() andaccept()*/ Len=strlen(msg); Bytes_sent=send(s,msg,len,0); …… (5)recv close * 创建一个新的通信端点 将一个本地地址关联到一个套接字上 宣布愿意接受连接;给出队列大小 发送/接收数据 释放连接 阻塞,直到有人企图连接上来 创建一个新的通信端点 主动尝试建立一个连接 发送/接收数据 释放连接 socket() bind () listen() accept() socket() write()/read() close() connect() write()/read() close() OS 1. socket() Web 服务器 2. bind(80) 3. listen() 80 Listen queue 客户 connect() Request from (IP, port) 未完成连接队列 已完成连接队列 客户端connect 进行三步握手 三步握手中 三步握手完毕 服务器端accept 操作系统 Web 服务器 2. bind(80) 80

文档评论(0)

PPT精品 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档