- 1、本文档共289页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络接口编程课件整理.ppt
绪论 网络工作原理,利用TCP/IP协议如何进行网络节点间的数据传输--分层次,两种服务、 C/S模型(理论性的) 套接字API:基于TCP/IP Socket接口,位于传输层和会话层之间,可编制出任何基于网络的应用程序 编程要求: 方便:网络协议可以从不同层次切入,越往高层越方便,与硬件的关系越小。一般地,通信接口编程是介于会话层和传输层之间,对通信进行控制。 可控性:对通信整个过程的控制要强,当然可控性与方便性是一矛盾 通用性:与硬件、与网络系统操作平台、与(底层)通信协议无关(相关性不大)--跨平台、协议兼容,只与接口类型相关。 2.1 Winsock三种套接字类型 流类型(Stream Sockets) 流式套接字提供了一种可靠的、面向连接的数据传输方式,使用TCP传输控制协议 数据报类型(Datagram Sockets) 数据包套接字提供了一种非可靠的、面向无连接的数据传输方式,使用用户报文数据包传输协议 原始套接字(Raw Sockets) 用于从IP头(而非TCP/UDP)起构造报文,利用“原始套接字” 可访问位于基层的传输协议,亦可对IP头信息进行实际的操作,如读写ICMP和IGMP报文。 2.2 面向无连接流程 基于UDP的socket编程 2.2 面向连接流程 基于TCP的socket编程 无连接循环服务器 使用无连接的 UDP 的服务器通常都工作在循环方式—— 一个服务器在同一时间只能向一个客户提供服务。 服务器收到客户的请求后,就发送 UDP 用户数据报响应该客户。但对其他客户发来的请求则暂时不予理睬,这些请求都在服务器端的队列中排队等候服务器的处理。 当服务器进程处理完毕一个请求时,就从队列中读取来自下一个客户的请求,然后继续处理。 无连接循环服务器的特点 面向连接并发服务器 服务器在同一时间可向多个客户提供服务。 TCP 是面向连接的,因此在服务器和多个客户之间必须建立多条 TCP 连接,而每一条 TCP 连接要在其数据传送完毕后才能释放。 使用 TCP 的服务器只能有一个熟知端口。因此主服务器在熟知端口等待客户发出的请求。一旦收到客户的请求,就立即创建一个从属服务器,并指明从属服务器使用临时端口和该客户建立 TCP 连接,然后主服务器继续在原来的熟知端口等待向其他客户提供服务。 面向连接并发服务器的特点 进程通过系统调用接口进行通信的过程1. 无连接循环服务器 2. 面向连接并发服务器 2.3 Winsock地址家族 要通过Winsock建立通信,必须了解如何利用指定的协议为工作站定址。Winsock2引入了几个新的、与协议无关的函数,它们可和任何一个地址家族一起使用,但是多数情况下,各协议家族都有自己的地址解析机制。 可以说不同协议下Winsock接口编程主要区别就在地址结构上的不同,其它接口函数调用都没有什么大的区别,这正体现了Winsock接口对通信协议的兼容性。 INET协议族地址结构sockaddr_in sin_family字段一般设为常量AF_INET,以告知Winsock此时正在使用IP地址家族,而非其他协议家族AF_IRDA、AF_IPX等。 sin_addr字段:IP地址。 sin_port字段定义使用哪个TCP或UDP通信端口来标识服务器服务,端口号 字段sin_zero唯一的作用是充当填充项,以使SOCKADDR_IN结构和SOCKADDR结构的长度一样(16个字节)。 与INET协议族地址结构sockaddr_in相关的是IPv4协议族地址结构in_addr,也是Winsock中常用的地址结构 该结构为包含多个结合的联合体,提供了3种赋值的接口: S_addr ,S_un_b 和S_un_w S_addr为32为无符号整数,对应32位IP地址,同上sin_addr, S_un_b包含4个8位无符号整数,组合起来表示IP地址 通用地址结构 为增强通用性,一些包含地址参数的Winsock接口函数如bind、connect等常用通用地址结构sockaddr: 对于程序员来讲,很少直接使用通用地址,唯一需要记住的是务必要将INT等其它地址强制转换为通用地址(造型) 例: struct sockaddr_in from; int len=sizeof(from); if(accept(sock,(struct sockaddr *)from,len)==SOCKET_ERROR) { printf(“accept : %d”,WSAGetLastError( )); } else { printf(“%s\n”,inet_ntoa(from.sin_addr)); } 小结 常用地址操
文档评论(0)