正在分析一个网络程序,是用api写的,其中一个模块要调用InitSock,说是要初始化套接字,请问?什么叫"初始化套接字"?
还有,就是其中的MAKEWORD(2,0)是什么意思?它如何转化成版本号?tcp/ip协议的版本号是不是可以随便写?应该怎么写?
BOOL IniSock(HWND hWnd)
{ WORD wVersionrequested;
WSADATA wsaData; wVersionrequested = MAKEWORD(2,0);


int err = WSAStartup(wVersionrequested,&wsaData);
if (err == -1)
{
MessageBox(0,"套接字初始化错误!", "远程控制",MB_OK|MB_APPLMODAL);
return FALSE;
} CONNECT = TRUE; //设置计时器
SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);
return TRUE;
}
//在此程序中,还有一个写法就是:
#define WINSOCK_VERSION 0x0101
WSAStartup(WINSOCK_VERSION,&wsaData)
为什么不定义WINSOCK_VERSION 0x1111?
也请一并给以解释。

解决方案 »

  1.   

    int WSAStartup(
      WORD wVersionRequested,
      LPWSADATA lpWSAData
    );wVersionRequested的高字节代表socket的次版本号,低字节代表主版本号!
    MAKEWORD(2,0)宏生成了一个低字节为2,高字节为0的WORD值,即要调用的socket的版本为2.0版本!#define WINSOCK_VERSION 0x0101
    WSAStartup(WINSOCK_VERSION,&wsaData)是要调用的1.1版本!任何的socket编程都要在程序的开始处调用WSAStartup()来初始化socket!
      

  2.   

    1.初始化套接字
      为了确认你所要用的WINSOCK的版本号.同时分配相应的资源.
    2.MAKEWORD(2,0)是一个宏.用来生成一个字(两个字节).高字节为2,低字节为0.在此是为了确定  WINSOCK的版本号:2.0
    3.#define WINSOCK_VERSION 0x0101生成的WINSOCK的版本号是1.0
    4. 版本号不可以随便写.跟你系统的支持有关.由WS2_32.DLL 实现.