作者:刘磊 2020.4.24 参考书目:《Windows网络编程》刘琰等著
一、套接字是什么
Windows Sockets是Windows环境下的网络编程接口,最初源于UNIX环境下的BSD Socket,是一个与网络协议无关的编程接口。
Windows 套接字为程序员提供了一套简单的API,Windows Sockets定义了程序员能够使用并且网络软件供应商能够实现的一套库函数调用和相关语义。
Windows Sockets API是Windows提供给基于套接字的网络应用程序开发的接口。
二、Sockets编程接口
三、Windows Sockets DLL的初始化和释放
使用任何Windows Sockets API调用前,必须先调用启动函数WSAStartup()来完成Windows Sockets DLL的初始化,目的是:协商版本支持,分配必要资源。完成对Windows Sockets DLL的使用后,必须调用函数WSACleanup()来实现释放为自己分配的资源。
1、WSAStartup()函数
函数原型:
WSAStartup(
_in wVersionRequested,
_out lpWSAData
);
参数说明:
wVersionRequested[in]: Windows Sockets API版本号
lpWSAData[out]: 指向WSADATA数据结构的指针,用来接收Windows Sockets实现细节。
返回值:
成功 - 0
失败 - 返回错误码
具体操作:
第一步:创建类型为WSADATA的对象。
WSADATA wsaData;
第二步:调用函数WSAStartup(),并根据返回值判断错误信息。
int iResult;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0)
{
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
PS:MAKEWORD(a, b)是将两个byte型合并成一个word型,b在高8位,a在低8位。例如,a = 2 = 0000 0010, b = 1 = 0000 0001,合起来就是 1 0000 0010
2、WSACleanup()函数
每一次WSAStartup()函数启动,必须对应一个WSACleanup()释放。
函数原型:
int WSACleanup(void);
返回值:
成功 - 0
失