Windows网络编程(基础篇1)

Windows网络编程(基础篇1)

  1. Winsock是一种网络编程接口,不是协议。
  2. 除了WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError属于Winsocket1.1规范函数外,凡是有前缀WSA的,都是在Winsock 2 中更新或者增添的一个新的API函数。

一、Winsock初始化

  1. 包含头文件winsock2.h,链接库WS2_32

    include <winsock2.h>
    
    #pragma comment(lib,"WS2_32")
    
  2. 使用Winsock的应用都必须加载合适的Winsock DLL版本,否则返回SOCKET_ERROR。使用WSAStartup加载,最后需要调用WSACleanup释放Winsock分配的资源。

    int WSAStartup(
     _In_  WORD      wVersionRequested,
     _Out_ LPWSADATA lpWSAData
    );
    • wVersionRequested:版本号,高阶字节指定小版本号,低位字节指定主版本。
    • lpWSAData 指向WSADATA数据结构的,接收Windows Sockets实现细节。
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);//成功返回0

    MAKEWORD:创建一个无符号16位整形,通过连接两个给定的无符号参数,也就是将(2,2)放入wVersionRequested中。

    WSAGetLastError();//返回调用winsock函数发生的错误代码
    WSACleanup();//程序结束时,需要调用释放资源

二、SOCKADDR_IN简介

  1. SOCKADDR_IN:用来指定IP地址和端口信息。

    typedef struct sockaddr_in {
       short   sin_family;          //The address family for the transport address,must AF_INET
       USHORT sin_port;         //port number
       IN_ADDR sin_addr;            // IPv4 transport address
       CHAR sin_zero[8];            //Reserved(预留) for system use
    } SOCKADDR_IN, *PSOCKADDR_IN;
  2. inet_pton 转换字符串到网络地址。将“点分十进制” -> “二进制整数”(inet_addr已弃用)

    //m_HostGroup.sin_addr.s_addr = inet_addr(strGroupIP);//代替方法如下:

    inet_pton(AF_INET, strGroupIP, (void*)&m_HostGroup.sin_addr.s_addr);

    INT WSAAPI InetPton(
     _In_  INT     Family,          // AF_INET and AF_INET6.
     _In_  PCTSTR pszAddrString,    //待转换的地址,IPV4 或 IPV6
     _Out_ PVOID  pAddrBuf          //转换后的(IPV4:IN_ADDR,IPV6: IN6_ADDR
    );
  3. htons 将整型变量从主机字节顺序转变成网络字节顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值