socket有关函数介绍
WSADATA data;
/// <summary>
/// 激活socket库
/// 参数一:2个字节的WORD(ushort),低字节表示主版本号,高字节表示所需WinSock实现的最低版本
/// 参数二:函数填入被激活的socket库信息,如实现的版本
/// </summary>
/// <returns>0:正常 其他:错误原因</returns>
int err = WSAStartup(MAKEWORD(2, 2), &data);
if (err != 0)
{
std::cout << "初始化失败";
return 0;
}
/// <summary>
/// 创建一个socket
/// 参数一:协议族,指socket使用的网络协议 AF_INET(IPv4) AF_INET6(IPv6)
/// 参数二:数据传输形式 SOCK_STREAM(有序可靠的分段流) SOCK_DGRAM(离散报文)
/// 参数三:传输协议 IPPROTO_TCP(tcp) IPPROTO_UDP(udp) 0(根据数据形式(参数二)指定合适协议)
/// </summary>
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
/// <summary>
/// 返回此线程中最近一次的错误代码
/// socket函数如果出现错误就会返回-1,windows中使用宏SOCKET_ERROR代替
/// 但是一个-1不能获得准确的错误信息,所以使用此函数
/// 此函数只获得最近的错误,如果发生一个错误后可能会连环造成其他错误发生
/// 就无法获得源头错误,因此应当在socket函数返回-1时就立即调用此函数
/// </summary>
WSAGetLastError();
/// <summary>
/// 停止传输消息,用于tcp连接的断开前使用
/// 参数二:SD_SEND(停止发送消息,并会发送出一个FIN) SD_RECEIVE(停止接受消息) SD_BOTH(都停止)
/// </summary>
shutdown(sock, SD_BOTH);
//关闭socket
closesocket(sock);
//关闭socket库,释放资源(会结束所有socket的操作,确保socket都关闭或未使用)
//WSAStartup()激活时采用的引用计数,即可多次激活,所以关闭的次数必须与激活次数一致
WSACleanup();
WSAGetLastError获得的都是异常的编号,可以在这篇博客 查看编号对应的错误详细信息
socket地址有关函数
//socket地址
sockaddr add;
add.sa_family;//地址类型,应该与socket创建时的网络协议一致(ipv4,ipv6等)
add.sa_data;//存储真正地址
//地址初始化专业数据类型
//socketAPI建立时没有类和多态继承,所以在socket函数需要
//地址数据时必须手动把这