基本函数
Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载。
这里使用#pragma命令,在编译时加载
#pragma comment (lib, "ws2_32.lib")
使用DLL之前,还需要调用 WSAStartup() 函数进行初始化
WSAStartup() 函数
函数原型
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
wVersionRequested 为 WinSock 规范的版本号,低字节为主版本号,高字节为副版本号(修正版本号);
lpWSAData 为指向 WSAData 结构体的指针。
出现问题
if(bind(servSock, (SOCKADDR*)&sockAddr, sizeof(sockAddr))!=0)
{
printf("error");
//return -1;
}
运行结果:
无法绑定指定端口。
原因
```c
int main()
{
char *str = "Hello World!";
SOCKET servSock= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKET clntSock;
SOCKADDR_IN sockAddr;
SOCKADDR_IN clntAddr;
int nSize = sizeof(SOCKADDR);
WSADATA wsaData;
WSAStartup(MAKEWORD(2,0), &wsaData);
未初始化Winsock就创建了套接字,导致连接失败。
解决
将创建套接字的代码放在初始化winsock代码后即可