#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>//网络库。<WinSock.h>
#pragma comment(lib,"Ws2_32.lib")//只有32位的。<Wsock32.lib>对应<WinSock.h>库。
int main(void)
{
WORD wdVersion = MAKEWORD(2,2);//传入MAKEWORD宏里,存入wdVersion里。
//MAKEWORD:原理((WORD)(((BYTE)(((DWORD_PTR)(a))&0xff))| ((WORD)(((BYTE)(((DWORD_PTR)(b)) &0xff)))<<8))。
WSADATA wdScokMsg;
//LPWSADATA lpw = malloc(sizeof(WSADATA));
//int a = *((char*)&wdVersion);
//int b = *((char*)&wdVersion+1);
//WSAStartup(wdVersion, lpw);
int nRes=WSAStartup(wdVersion,&wdScokMsg);
if (0!=nRes)
{
switch (nRes)
{
case WSASYSNOTREADY:
printf("重启下电脑试试,或者检查网络库。\n");
break;
case WSAVERNOTSUPPORTED:
printf("请更新网络库。\n");
break;
case WSAEINPROGRESS:
printf("请重新启动软件。\n");
break;
case WSAEPROCLIM:
printf("请尝试关掉不必要的软件,以为当前网络运行提供充足的资源。\n");
break;
/*case WSAEFAULT://参数问题。
break;*/
}
}
//校验版本。
if (2 != HIBYTE(wdScokMsg.wVersion) || 2 != LOBYTE(wdScokMsg.wVersion))
{
//说明版本不对。
//清理网络库。
WSACleanup();
return 0;
}
//free(lpw);
system("pause");
return 0;
}
SOCKET socketServer = socket();
socket:
1、将底层复杂的协议体系,执行体系,进行封装,封装完了的结果,就是一个SOCKET。也就是说SOCKET是我们调用协议进行通信的操作接口。
2、意义:大大减轻了编程层面人员的负担,不用考虑网络编程协议本身的复杂性。
3、本质:是一种数据类型,就是一个整数();但这个数是唯一的,标识着我当前的应用程序,协议特点等信息;ID,门牌号。
4、应用:网络编程的函数都要使用SOCKET;逻辑:每个客户端就有一个SOCKET,服务器有一个SOCKET,通信时需要这个SOCKET做参数,给谁通信,就要传递谁的SOCKET。
5、总结:网络编程,理论层面SOCKET是网络封装的精华。代码层面就是不停的使用SOCKET这个变量,所以又叫SOCKET编程。