服务端过程
加载库
加载库的函数为——WSAStartup(参数1,参数2);
此函数返回值是int类型,因此定义int型变量err接收函数返回值
int err=WSAStartup(version,&data);
WSAStartup函数使用时需要先引入头文件
#include<winsock2.h>
WSAStartup函数需要两个参数
第一个输入参数是WORD类型,表示需要加载的库的版本号,定义version宏表示版本号
第二个输出参数是结构体指针类型,定义data结构体,取地址变成指针传入
WORD version = MAKEWORD(2, 2);
WSADATA data = {};
将定义的两个参数传入后,需要判断加载库是否成功
如果没有成功,则需要退出程序
if (err != 0)
{
cout << "WSAStartup fail!" << endl;
return 1;
}
如果加载成功,需要判断版本号
判断版本号方法:取出高字节和低字节,都与版本号进行比较
加载库成功,且版本号正确,打印成功日志
if (2==HIBYTE(data.wVersion)&&2== LOBYTE(data.wVersion))
{
cout << "WSAStartup successful" << endl;
}
如果加载库成功,但版本号错误,需要卸载库,同时结束程序
卸载库方法:WSACleanup
else
{
cout << "WSAStartup version error";
//卸载库
WSACleanup();
return 1;
}
创建套接字
创建套接字函数——socket 函数返回值——SOCKET类型
第一个参数为ip地址类型——ipv4——AF_INET
IP地址分类:
(1)IPv4
这是早期广泛使用的版本,由32位组成,通常表示为四个点分十进制数(如192.168.0.1)。每个部分范围从0到255。由于IPv4地址空间有限,现在已经接近用尽。
(2)IPv6
为了替代IPv4,设计了更大容量的地址系统,由128位组成,采用冒号十六进制表示(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6地址空间极大,几乎可以确保无限供应。
socket类型——用户数据报套接字——根据协议选择的
套接字类型
1. 流式套接字(Stream Socket):这种套接字提供的是顺序、无错误的数据传输,类似于文件流。它们适合于需要完整数据传输的应用场景,如HTTP请求响应、SMTP邮件等。
2. 数据报套接字(Datagram Socket):也称为无连接套接字,每个数据包都是独立发送的ÿ