Winscok头文件的使用c
winsock是c++自带的套接字头文件,在网络编程中应用很广泛,但是里面又很多命名很复杂,有点不好理解,但是和封装好的第三方库基本差不多,都是先初始化->绑定->监听->接受->具体函数,下面是一个实例:
这里分为四个部分:
第一部分是实例化一个WSADATA 结构体为wsaData,这是windows socket api data 的缩写,然后它储存了一些winsock的基本信息如版本,报错等,然后定义一个result值来判断(这里我没有用上)因为winsock中的函数返回值大部分都是int类型而且一般为0表示成功。
第二部分是定义了两个SOCKET结构体,一个是server端,一个是client端,其中储存着用的协议族,用的ip地址,和端口号,INVALID_SOCKET表示默认的。
第三部分定义了两个sockaddr_in结构体分别储存了服务端和客户端的地址。
第四部分定义了一个用户地址长度(字节数)以后用于传参,和一个缓冲区,以后用于接受客户端发送过来的数据。
接下来开始写函数:
(第4行)与其他库函数一样,先写初始化,但是这里比其他库多一个WSASstartup函数用来接收wsa的版本,和基础信息,用MAKEWORD(2,2)表示用到winsock2.2版本。
(第6行-10行)然后开始创建一个listensocket套接字,并用sin_family指定用的协议,AF_INET表示用的ipv4,然后用sin_addr绑定一个地址(这里报错了c4996,问题不大直接忽略),然后用sin_port创建一个端口。
(第12行)用bind函数绑定serveraddr到listensocket中。
(第14行)然后用serveraddr这个套接字开始监听,SOMAXCONN表示最大可连接128个客户端。
(第16行)用accept函数接收发来请求的客户端,然后为它分配一个新的套接字clientsocket我们也称之为对话套接字,前面的listensocket也称之为监听套接字。
(18行-22行)我们用两个函数recv和send进行接收和发送信息。
最后关闭两个套接字,并清理内存。
winsock是一个比较底层的头文件了,我们如果嫌每次写太多东西了很麻烦,可以自己封装一下:
把前面的一些定义性的东西封装到一个头文件中,以后要使用直接包含一个头文件就行了:
如果对你学习有帮助的话,就给我点个赞吧!