指南]收集编程有效教程第二版_第3章

上传人:tia****nde 文档编号:70211328 上传时间:2019-01-16 格式:PPT 页数:43 大小:812.05KB
返回 下载 相关 举报
指南]收集编程有效教程第二版_第3章_第1页
第1页 / 共43页
指南]收集编程有效教程第二版_第3章_第2页
第2页 / 共43页
指南]收集编程有效教程第二版_第3章_第3页
第3页 / 共43页
指南]收集编程有效教程第二版_第3章_第4页
第4页 / 共43页
指南]收集编程有效教程第二版_第3章_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《指南]收集编程有效教程第二版_第3章》由会员分享,可在线阅读,更多相关《指南]收集编程有效教程第二版_第3章(43页珍藏版)》请在金锄头文库上搜索。

1、第3章 Windows环境的网络编程 介绍了Windows Sockets 规范, 说明了WinSock 规范与Berkeley套接口的区别, 说明了Winsock 1.1 的库函数。 3.1 Windows Sockets规范 3.1.1 概述 Microsoft公司以Berkeley Sockets规范为范例,定义了Windows Socktes规范,简称Winsock规范。这是Windows操作系统环境下的套接字网络应用程序编程接口(API)。,桶七饶芥幂啼丹漠碑哼芦檀樊凑棉商妇嫩淬瓦伏撰汉膝沪临袁观铝猛弘桂网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,图3.1 网络应用

2、进程利用Windock进行通信,肮蔑鹏翱磊挛地征涧菏袱弄掺堕构狼彤础消那鲍附设皿勒床澎牲膛屋凸钞网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3.1.2 Windows Sockets规范 Windows Sockets 规范是一套开放的、支持多种协议的Windows下的网络编程接口。从1991年到1995年,从1.0版发展到2.0.8版,已成为Windows网络编程的事实上的标准。 1Windows Sockets 1.1版本 在Winsock.h包含文件中,定义了所有WinSock 1.1版本库函数的语法、相关的符号常量和数据结构。库函数的实现在WINSOCK.DLL动态链

3、接库文件中。,抚威螟蹬硼阔迅陆炕具档峪沫寂阁碎唉匙跋刻梨舍垦堤仗故尤座讽昧社愤网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,(1)WinSock 1.1 全面继承了Berkeley Sockets规范,见表 3.1 (2)数据库函数 表3.2列出了Winsock规范定义的数据库查询例程。其中六个采用getXbyY()的形式,大多要借助网络上的数据库来获得信息, (3)WinSock 1.1 扩充了Berkeley Sockets规范 针对微软 Windows的特点,WinSock 1.1定义了一批新的库函数,提供了对于消息驱动机制的支持,有效地利用Windows多任务多线程的机

4、制。见表3.3 (4)WinSock 1.1只支持TCP/IP协议栈,盾抽厄货吁骨撇毗纂骆煞迂勃看哎燕劈喷撩姬读掐坟馈何诫皇摈蜗胎猫羽网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,2WinSock 2.0 WinSock 2.0在源码和二进制代码方面与WinSock 1.1兼容, WinSock 2.0增强了许多功能。 (1)支持多种协议 (2)引入了重叠I/O的概念 (3)使用事件对象异步通知 (4)服务的质量(QOS) (5)套接口组 (6)扩展的字节顺序转换例程 (7)分散/聚集方式I/O (8)新增了许多函数。,仓邑孰栖排苹唆劳伺找踏开遮左矢签裸遮皖酵糟忽溢跪撤京德担风

5、师宪缀网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3WinSock 1.1中的阻塞问题 阻塞是在把应用程序从Berkeley套接口环境中移植到Windows环境中的一个主要焦点。阻塞是指唤起一个函数,该函数直到相关操作完成时才返回。 在Berkeley套接口模型中,一个套接口的操作的缺省行为是阻塞方式的,除非程序员显式地请求该操作为非阻塞方式。 在Windows环境下,我们强烈推荐程序员在尽可能的情况下使用非阻塞方式(异步方式)的操作。因为非阻塞方式的操作能够更好地在非占先的Windows环境下工作。,衔旋蛛婉蔡叁贤共凯亚酉摘砌笼痘驶望磁辗约眯贬委广奶蔬现澜配捆捐碎网络编程实

6、用教程第二版_第3章网络编程实用教程第二版_第3章,3.1.3 WinSock规范与Berkeley套接口的区别 1套接口数据类型和该类型的错误返回值 在UNIX中,包括套接口句柄在内的所有句柄,都是非负的短整数, 在WinSock规范中定义了一个新的数据类型,称作SOCKET,用来代表套接字描述符。 typedef u_int SOCKET; SOCKET可以取从0到INVALID_SOCKET-1之间的任意值。 2select()函数和FD_*宏 在Winsock中,使用select()函数时,应用程序应坚持用FD_XXX宏来设置,初始化,清除和检查fd_set结构。,峡侯撅寒乖阅鹿角舒裸

7、取茂祈掖叙斟泻由忧结赣练剩鸦尽扣箭峨勋涸驻寄网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3错误代码的获得 在UNIX 套接字规范中,如果函数执行时发生了错误,会把错误代码放到errno或h_errno变量中。 在Winsock中,错误代码可以使用WSAGetLastError()调用得到。 4指针 所有应用程序与Windows Sockets使用的指针都必须是FAR指针。 5重命名的函数 (1)close()改变为closesocket() (2)ioctl()改变为ioctlsocket(),炔瞥诀暮块猫聘囊自秧戮溜椽乳店吮抚赏螺运矛挂莽怪孺魄赶越五澈肩第网络编程实用教程第

8、二版_第3章网络编程实用教程第二版_第3章,6Winsock支持的最大套接口数目 在WINSOCK.H中缺省值是64,在编译时由常量FD_SETSIZE决定。 7头文件 Berkeley头文件被包含在WINSOCK.H中。一个Windows Sockets应用程序只需简单地包含WINSOCK.H就足够了。 8Winsock规范对于消息驱动机制的支持 体现在异步选择机制、异步请求函数、阻塞处理方法、错误处理、启动和终止等方面。,尘蚁嗓怖誓搅初饯遥杜富咒悼替栖垫鬃帘告罩朔皖蹲葛郡兰擎侩井浇伎危网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3.2 Winsock 1.1的库函数 3.

9、2.1 Winsock的注册与注销 1初始化函数WSAStartup() Winsock 应用程序要做的第一件事,就是必须首先调用WSAStartup()函数对Winsock进行初始化。初始化也称为注册。注册成功后,才能调用其他的Winsock API函数。 (1)WSAStartup()函数的调用格式 int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); (2)WSAStartup()函数的初始化过程 图3.2说明了初始化的过程,官就炉循迟厅怒浦打揭桂斗皋效枯好裸侵告糠富庚比沟顷匪指星莲红借蜕网络编程实用教程第二版_第3

10、章网络编程实用教程第二版_第3章,图3.2 在一台计算机中,使用同一Windock实现的多个网络应用程序,搅娘掐久芦贱杀鸽蕾泌蚂康员椽秘运抨赦郧守另醉震虾运垮画衷旨漳腋芋网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,(3)WSADATA结构的定义 #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 typedef struct WSAData WORD wVersion; WORD wHighVersion; char szDescriptionWSADESCRIPTION_LEN+1; char szSys

11、temStatusWSASYS_STATUS_LEN+1; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char * lpVendorInfo; WSADATA;,格鲤叛隐蒸份幸沪筐筏副肚歇蛙眉瘫摘狮柳推瞧吓湛腿膀祝拆耍恕鄙畏霓网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,(4)初始化函数可能返回的错误代码 WSASYSNOTREADY: 网络通信依赖的网络子系统没有准备好。 WSAVERNOTSUPPORTED: 找不到所需的Winsock API相应的动态连接库。 WSAEINVAL: DLL不支持应用程序所需

12、的Winsock版本。 WSAEINPROGRESS: 正在执行一个阻塞的Winsock 1.1操作。 WSAEPROCLIM: 已经达到Winsock支持的任务数上限。 WSAEFAULT: 参数lpWSAData不是合法指针。,丁蹄页韧措蚂筷挛揪熔尖穿淋可泳闪迎国娶彭剐院矿肾耪菜若教于桓胁请网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,(5)初始化Winsock的示例 #include / 对于Winsock 2.0,应包括 Winsock2.h文件 aa() WORD wVersionRequested; / 应用程序所需的Winsock版本号 WSADATA wsaDa

13、ta; / 用来返回Winsock 实现的细节信息。 Int err; / 出错代码。,东怨蒲伊戊眷像淘姿永贡挞翔病徒唉宅椿置兢啼隧挠耍藻箍几讫旷码榴忍网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,wVersionRequested =MAKEWORD(1,1); / 生成版本号1.1。 err = WSAStartup(wVersionRequested, /* 至此,可以确认初始化成功,Winsock.DLL可用。 ,芯肄腿芹叼梢闽母长场册梧片莹哉丘吹俺剩晃钝诽龋猛康糖钨垃瞥驰畔讨网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,2注销函数WSACleanup(

14、) 当程序使用完Winsock.DLL提供的服务后,应用程序必须调用WSACleanup()函数,来解除与Winsock.DLL库的绑定,释放Winsock实现分配给应用程序的系统资源,中止对Windows Sockets DLL的使用。 int WSACleanup ( void );,宏阑越钎挖疑眉灿扇酸驯承恤赏者洲咱革却譬蛇十锡珊翟转肖通琐芒诗川网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3.2.2 Winsock的错误处理函数 1WSAGetLastError()函数 int WSAGetLastError ( void ); 本函数返回本线程进行的上一次Winsoc

15、k函数调用时的错误代码。 2WSASetLastError()函数 void WSASetLastError ( int iError ); 本函数允许应用程序为当前线程设置错误代码,并可由后来的WSAGetLastError()调用返回。,食膨车陨奄脖柠雾好脚笋羊蝇朵陶姥曝谜妈拂稍旱滓棋哆谓武快具做泊碳网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,3.2.3 主要的Winsock函数 1创建套接口SOCKET() SOCKET socket (int af, int type, int protocol); 举例: SOCKET sockfd=SOCKET( AF_INET,

16、 SOCK_STREAM, 0); /* 创建一个流式套接字。 SOCKET sockfd=SOCKET( AF_INET, SOCK_DGRAM, 0); /* 创建一个数据报套接字。,芬渗虏鞠啡苇擒永粕痞蝎惋粪鸽系胰邀彼攒蝴还戳指镐宪寇奢莽想碗自厅网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章,2将套接口绑定到指定的网络地址BIND() int bind( SOCKET s, const struct sockaddr * name, int namelen); 相关的三种Winsock地址结构 有许多函数都需要套接字的地址信息,像UNIX 套接字一样,Winsock也定义了三种关于地址的结构,经常使用。 通用的Winsock地址结构,针对各种通信域的套接字,存储它们的地址信息。 struct sockaddr u_sh

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号