科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 2878 次
  • 编辑次数: 1 次 历史版本
  • 更新时间: 2009-03-19
admin
admin
发短消息
相关词条
bat
bat
Processing语言
Processing语言
固件
固件
SSID
SSID
LAMP
LAMP
Flash和HTML5
Flash和HTML5
沙盒
沙盒
六种主要计算机语言优缺点
六种主要计算机语言优缺点
系统集成
系统集成
间谍软件
间谍软件
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

头文件 header:  Winsock2.h
库   library:      Ws2_32.lib
原型:
        int   PASCAL   FAR   WSAStartup ( WORD    wVersionRequested,   LPWSADATA      lpWSAData );
参数:
        wVersionRequested   是Windows Sockets API提供的调用方可使用的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号
        lpWSAData             是指向WSADATA数据结构指针,用来接收Windows Sockets实现的细节

目录

功能编辑本段回目录

一、WSAStartup函数
int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
二、WSACleanup函数
int WSACleanup (void);
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。

使用方法编辑本段回目录

一、WSAStartup函数
                int WSAStartup
                       (
                          WORD wVersionRequested,
                          LPWSADATA lpWSAData
                         );
使用Socket程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。
例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );

二、WSACleanup函数
int WSACleanup (void);
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。

三 Socket接口的检索有关域名、通信服务和协议等Internet信息的数据库函数,如

gethostbyaddr、gethostbyname、gethostname、getprotolbyname

getprotolbynumber、getserverbyname、getservbyport。
1.gethostname()

  【函数原型】

int PASCAL FAR gethostname (char FAR * name, int namelen);

  【使用说明】

  该函数可以获取本地主机的主机名,其中:

  name:用于指向所获取的主机名的缓冲区指针

  Namelen:缓冲区的大小,以字节为单位。

  返回值:若无错误,返回0;否则,返回错误代吗。
2.gethostbyname()

  【函数原型】

struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name);

  【使用说明】

  该函数可以从主机名数据库中得到对应的“主机”。

  该函数唯一的参数name就是前面调用函数gethostname()得到的主机名。若无错误,刚返回一个指向hostent结构的指针,它可以标识一个“主机”列表。

注释:编辑本段回目录

        本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数.
                        为支持日后可能和Windows Sockets 1.1有功能上差异的Windows Sockets实现及应用程序,在WSAStartup()中规定了一个协议.WSAStartup()的调用方和Windows Sockets DLL互相通知对方它们可以支持的最高版本,并且互相确认对方的最高版本是可接受的. 在WSAStartup()函数的入口,Windows Sockets DLL检查了应用程序所需的版本.如果版本高于DLL支持的最低版本,则调用成功并且DLL在wHighVersion中返回它所支持的最高版本,在wVersion中返回它的高版本和wVersionRequested中的较小者.然后Windows Sockets DLL就会假设应用程序将使用wVersion.如果WSDATA结构中的wVersion域对调用方来说不可接收, 它就应调用WSACleanup()函数并且要么去另一个Windows Sockets DLL中搜索,要么初始化失败.
        本协议允许Windows Sockets DLL和Windows Sockets应用程序共同支持一定范围的Windows Sockets版本.如果版本范围有重叠,应用程序就可以成功地使用Windows Sockets DLL.下列的图表给出了WSAStartup()在不同的应用程序和Windows Sockets DLL版本中是如何工作的:

应用程序版本    DLL版本    wVersionRequested    wVersion    wHighVersion    最终结果
1.1             1.1             1.1             1.1             1.1             use 1.1
1.0 1.1         1.0             1.1                 1.0             1.0             use 1.0
1.0             1.0 1.1         1.0                 1.0             1.1             use 1.0
1.1             1.0 1.1         1.1                 1.1             1.1             use 1.1
1.1             1.0             1.1                 1.0             1.0             失败
1.0             1.1             1.0                 --             --    WSAVERNOTSUPPORTED
1.0 1.1         1.0 1.1         1.1                 1.1             1.1             use 1.1
1.1 2.0         1.1             2.0                 1.1             1.1             use 1.1
2.0             1.1             2.0                 1.1             1.1             失败

        下列代码段给出了只支持Windows Sockets 1.1版本的应用程序是如何进行WSAStartup()调用的:

                  WORD wVersionRequested;
                  WSADATA wsaData;
                  int err;

                  wVersionRequested = MAKEWORD( 1, 1 );

                  err = WSAStartup( wVersionRequested, &wsaData );
                  if ( err != 0 ) {
                          /* Tell the user that we couldn't find a useable */
                          /* winsock.dll.                                  */
                          return;
                  }

                  /* Confirm that the Windows Sockets DLL supports 1.1.*/
                  /* Note that if the DLL supports versions greater    */
                  /* than 1.1 in addition to 1.1, it will still return */
                  /* 1.1 in wVersion since that is the version we      */
                  /* requested.                                        */

                  if ( LOBYTE( wsaData.wVersion ) != 1 ||
                                   HIBYTE( wsaData.wVersion ) != 1 ) {
                          /* Tell the user that we couldn't find a useable */
                          /* winsock.dll.                                  */
                          WSACleanup( );
                          return;
                  }

                  /* The Windows Sockets DLL is acceptable.  Proceed.  */

        下面的代码段示例了只支持1.1版的Windows Sockets DLL是如何进行WSAStartup()协商的:

                  /* Make sure that the version requested is >= 1.1.   */
                  /* The low byte is the major version and the high    */
                  /* byte is the minor version.                        */

                  if ( LOBYTE( wVersionRequested ) < 1 ||
                           ( LOBYTE( wVersionRequested ) == 1 &&
                                 HIBYTE( wVersionRequested ) < 1 ) {
                          return WSAVERNOTSUPPORTED;
                  }

                  /* Since we only support 1.1, set both wVersion and  */
                  /* wHighVersion to 1.1.                              */

                  lpWsaData->wVersion = MAKEWORD( 1, 1 );
                  lpWsaData->wHighVersion = MAKEWORD( 1, 1 );

        一旦应用程序或DLL进行了一次成功的WSAStartup()调用,它就可以继续进行其它所需的Windows Sockets API调用.当它完成了使用该Windows Sockets DLL的服务后,应用程序或DLL必须调用WSACleanup()以允许Windows Sockets DLL释放任何该应用程序的资源.
        实际的Windows Sockets实现细节在WSAData结构中描述如下:

                  struct WSAData {
                           WORD           wVersion;
                           WORD           wHighVersion;
                           char
                           szDescription【WSADESCRIPTION_LEN+1】;
                           char           szSystemStatus【WSASYSSTATUS_LEN+1】;
                           unsigned short iMaxSockets;
                           unsigned short iMaxUdpDg;
                           char FAR *          lpVendorInfo;
                  };

        该结构的成员为:
                        成员        用法
                  wVersion      Windows Sockets DLL期待调用方使用的Windows Sockets规范的版本.
                  wHighVersion      DLL可支持的Windows Sockets规范的最高版本.通常它和wVersion相同.
                  szDescription     一个null结尾的ASCII字串,Windows Sockets DLL将Windows Sockets实现的说明及厂商描述拷至该串.这段文本(长度最多256个字符)可能包含任何字符, 但厂家注意到不把控制和格式字符包含进去:该字串的最可能用法就是在状态消息中显示.
                  szSystemStatus    一个null结尾的ASCII字串,Windows Sockets DLL将相关的状态和配置信息拷至该串.Windows Sockets DLL只有在该信息对用户或支撑人员有用时才会使用该域:它不应该被认为是szDescription域的扩展.
                  iMaxSockets       一个进程可以打开的最大套接口数目.Windows Sockets的实现可以提供一个全局的套接口池给任何进程分配;也可以为每个进程分配套接口资源.该数字可反映出Windows Sockets DLL或网络软件是如何配置的.应用程序员可以使用该数字作为该Windows Sockets实现是否可以被应用程序使用的原始依据.例如,一个X Windows服务器可能在它启动时检查iMaxSockets:若它小于8,应用程序应显示一条错误信息, 让用户重新配置网络软件.(这是szSystemStatus可能使用到的一种情况.)显然,并不保证一个特定的应用程序可以实际分配到iMaxSockets个套接口,因为可能有其它的Windows Sockets应用程序在使用.
                  iMaxUdpDg     以字节表示的可由Windows Sockets应用程序发送或接收的最大UDP数据报的大小.如果应用程序没有给出限制,iMaxUdpDg为0.在Berkeley套接口的许多实现中,对于UDP数据报的导向有一个隐含的限制8192字节.Windows Sockets的实现可以在分配碎片重组缓冲区的基础上给出界限.对于一般的Windows Sockets实现iMaxUdpDg的最小值为512.注意不考虑iMaxUdpDg的值,而试图在网络上发送一个大于最大传输单元(MTU)的广播数据报是不明智的.(Windows Sockets API没有提供发现MTU的机制,但它必须不小于512字节.)
                  lpVendorInfo      指向厂商规定数据结构的远指针.该结构的定义(如果提供)超出了本规范的范围.
       
        应用程序或DLL若需要多次得到WSAData结构信息,就必须多次调用WSAStartup().然而,wVersionRequired参数假设在所有调用WSAStartup()中都相同;也就是,应用程序或DLL不能在第一次调用WSAStartup()后改变Windows Sockets的版本号.
        对应于每一次WSAStartup()调用必须有一个WSACleanup()调用,以使第三级(third-party)DLL可以利用和应用程序相关的Windows Sockets DLL.这意味着,例如,如果应用程序调用了WSAStartup()三次,它就必须调用WSACleanup()三次.对WSACleanup()的前两次调用除了减少内置计数器以外不做任何事, 对任务的最后一次WSACleanup()调用为任务释放了所有所需的资源.

返回值:   
        0       成功.
        否则返回下列的错误代码之一.注意通常依靠应用程序调用WSAGetLastError()机制获得的错误代码是不能使用的,因为Windows Sockets DLL可能没有建立"上一错误"信息储存的客户数据区域.

关于Windows Sockets提供者的说明:
        每一个Windows Sockets应用程序必须在进行其它Windows Sockets API调用前进行WSAStartup()调用.这样,本函数就可以用于初始化的目的.
        进一步的说明在WSACleanup()的说明中有讨论.

错误代码:
        WSASYSNOTREADY      指出网络通信依赖的网络子系统还没有准备好.
                        WSAVERNOTSUPPORTED  所需的Windows Sockets API的版本未由特定的Windows Sockets实现提供.
        WSAEINVAL                   应用程序指出的Windows Sockets版本不被该DLL支持.

参见:
        send(), sendto(), WSACleanup()

→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: WSAStartup()

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。