您的位置:首页 > 其它

Socket学习随笔(一)

2014-12-01 11:38 225 查看
1、打开Winsock——WSAStartup()

使用Winsock API编制的网络应用程序中,在调用任何一个Winsock函数之前,都必须先检查协议栈的安装情况,也就是检查系统中是否有Windows Sockets的实现库。通过调用WSAStartup()函数便可检测系统中有没有一个或多个Windows Sockets实现,本函数必须是应用程序或DLL调用的第一个Windows Sockets函数,它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows
Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能进一步调用其他的Windows Sockets API函数。

1.1 函数的格式

int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

1.2 参数说明

wVersionRequested:此参数是一个WORD型(双字节型)数值,它指定准备在应用程序中要使用的Winsock库的版本号。其中
,用高位字节指定副版本,用低位字节指定主版本。

lpWSAData:此参数是一个指向WSADATA结构的指针。当该函数被调用时,它返回关于Windows Sockets实现的详细信息, 该结构的定义如下:

typedef
struct WSAData {

WORD wVersion;

WORD wHighVersion;

char szDescription[WSADESCRIPTION_LEN+1];

char szSystemStatus[WSASYS_STATUS_LEN+1];

unsigned short iMaxSockets;

unsigned short iMaxUdpDg;

char FAR * lpVendorInfo;
} WSADATA;
各字段的含义说明如下:
wVersion:调用者希望使用的Winsock版本号。
wHighVersion:加载的Winsock库所支持的最高Winsock版本,通常和wVersion的值相同。
szDescription:系统加载的Winsock库的说明字符串,如“Winsock
2.0”。
szSystemStatus:系统状态或配置信息的说明字符串。
iMaxSockets:套接口的最大编号(该字段被Winsock
2 或其后的版本忽略)。
iMaxUdpDg:UDP数据报的最大容量(该字段被Winsock
2 或其后的版本忽略)。
lpVendorInfo:厂商专有信息(该字段被Winsock
2 或其后的版本忽略)。
该结构中,WSAStartup()函数返回的比较有用的信息是wVersion和wHighVersion这两个关于Winsock版本的字段,
其他字段则很少用。
1.3
函数返回信息
WSAStartup()函数的返回值是一个整数,如果调用成功则返回0
WSAStartup()函数调用不成功时返回如下的错误信息:
WSASYSNOTREADY:在Winsock的 头文件Winsock.h中,该错误代码定义的数值为10091,它表明加载的Winsock
DLL不存在或底层的网络子 系统无法使用。

WSAVERNOTSUPPORTED:该代码的数值为10092,所需的Windows
Sockets API的版本未由特定的Windows Sockets实现提供。如果由
wVersion返回的版本用户不能接受,则要调用WSACleanup()函数清除对Winsock的加载。
WSAEINVAL:该代码的数值为10022,说明应用程序指出的Windows
Sockets版本不能被该Winsock DLL的实现所支持。
WSAEINPROGRESS:该代码的数值为10036,说明一个阻塞的Winsock调用正在进行中。
WSAEPROCLIM:该代码的数值为10067,说明已经达到了Windows
Sockets实现所支持的任务数量的极限
WSAEFAULT:该代码的数值为10014,说明lpWSAData参数是一个无效的指针。
。。。。。。
1.4 函数使用说明
该函数在程序中的基本使用方法如下:
#include<Winsock2.h>
//...其他代码
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2,
2);

if(WSAStartup(wVersionRequested,
&wsaData) != 0)
{
//Winsock初始化错误
//输出Winsock初始化错误提示信息
return;
}
//...其他代码

结束对Winsock DLL库的使用时,一定要调用WSACleanup()函数卸载所加载的库。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: