如:
wVersionRequested = MAKEWORD(  3, 3 );
err = WSAStartup( wVersionRequested, &wsaData );为什么也是对的呐?
只有低版本才不行吗?
那这个函数有什么用呐?支持高的而不支持低的?不明白怎么会事,求解多谢

解决方案 »

  1.   

    请求的不一定满足啊,实际满足的被保存在了第二个参数(wsaData)中返回了。
      

  2.   

    返回正确,不等于满足,不信你检查一下wsaData中给你指定的版本,肯定不是你所请求的3.3。
    WSAStartup所采用的机制是“基于已有版本,尽可能满足客户要求”,所以,目前最高版本是2.0,当你请求3.3时,返回的应该就时2.0。
      

  3.   

    首先,系统提供SOCKET操作是由WS2_32.DLL来提供的。
    我们的应用程序通过WSAStartup来向WS2_32.DLL请求自己需要的Windows Socket版本。
    如果请求的版本高于或等于WS2_32.DLL所支持的最低版本,则WSAStartup成功返回。
        其中,wsaData结构体中的wHighVersion返回为WS2_32.DLL所支持的最高版本;
        而另一成员wVersion则存放了WS2_32.DLL推荐该应用程序使用的Windows Socket版本。
    成功返回后,WS2_32.DLL就"主观臆断"应用程序会以wVersion版本的规格来操作Windows Socket。
    这样做主要是为了让WS2_32.DLL尽可能满足用户(应用程序)的需要。
    所以一般来说,请求的版本号越大越不会出错,因为只要">="就成功返回。
    WS2_32.DLL说:“虽然这里没有你要的,但是我已经把这里最好的给你了,你还想讨价还价?”
    请求1.1反而出错可能是
    之后的函数调用用的是winsock2.h中的函数?
    你的系统最低支持版本已经大于1.1了?
    或者其它?
    我觉得应该是其他原因。
    谢谢。