新建socket工程
首页索引–C++百万并发网络通信-笔记目录
1-1 头文件的使用
在windows平台下,要引用如下两个头文件
#define WIN32_LEAN_AND_MEAN
#include<Windows.h>
#include<WinSock2.h>
要注意的是,Windows.h
中包含1.x版本的套接字宏,如果没有WIN32_LEAN_AND_MEAN
这个宏的话,Windows.h
会与WinSock2.h
中2.x版本的宏冲突。加上WIN32_LEAN_AND_MEAN
是微软的建议。
或者如下这种定义也是可以的:
#include<WinSock2.h>
#include<Windows.h>
1-2 windows平台的启动与关闭服务
注意下面main函数中的代码是在windows平台下适用的,如果切换到别的平台下,这些基础代码可能就不适用了。
加入静态链接库的代码也是必须的,这句话也是适用于windows平台,还有另一种方式就是【修改项目的附加依赖项】,也就是下面两张图片里的操作,一旦修改了附加依赖项以后,就可以注释掉#pragma这一句。
完整代码如下,查阅了一下不熟悉的东西:
WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令。是Windows下的网络编程接口软件Winsock1 或 Winsock2 里面的一个命令(Ps:Winsock 是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口)。
为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
函数声明-- int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );
⑴ wVersionRequested:一个WORD(双字节)型数值,在最高版本的Windows Sockets支持调用者使用,高阶字节指定小版本(修订本)号,低位字节指定主版本号。
⑵lpWSAData 指向WSADATA数据结构的指针,用来接收Windows Sockets 实现的细节。
参考:百度百科
WSADATA,一种数据结构。这个结构被用来存储被WSAStartup函数调用后返回的Windows Sockets数据。它包含Winsock.dll执行的数据。
参考:百度百科
MAKEWORD 宏 平台:SDK这个宏创建一个无符号16位整型,通过连接两个给定的无符号参数。(注:typedef unsigned short WORD;)
WORD MAKEWORD(
BYTE bLow, //指定新变量的低字节序;
BYTE bHigh //指定新变量的高字节序;
);
参考:百度百科
#define WIN32_LEAN_AND_MEAN
#include<Windows.h>
#include<WinSock2.h>
#pragma comment(lib, "ws2_32.lib")//加入静态链接库
int main()
{
WORD ver = MAKEWORD(2, 2);//WORD版本号
WSADATA dat;//一种数据结构
WSAStartup(ver, &dat);//启动windows socket网络环境
//程序
WSACleanup();//关闭windows socket网络环境
return 0;
}
【资源管理器】【项目名称】右键【属性】,左侧【输入】,【附加依赖项】【编辑】,然后输入静态链接库的名称,
接着在程序中打一个断点,开始调试,能够观察到如下数据:
创建的数据版本号:514
当前描述:WinSock2.0,与我们引入的头文件相同