一、创建套接字


简要描述:
套接字的创建采用的是socket( )函数
源码:

  1. SOCKET WSAAPI socket(
  2. [in] int af,
  3. [in] int type,
  4. [in] int protocol
  5. );

参数:

  • [in] af:地址族规范
    • 当前支持的值为 AF_INET(IPv4) 或 AF_INET6(IPv6)
  • [in] type:套接字的类型规范
    • SOCK_STREAM:
      • 一种套接字类型,通过OOB数据传输机制提供有序的、可靠的、双向的、基于连接的字节流。基于TCP得流式套接字。
    • SOCK_DGRAM:
      • 基于UDP协议的数据报套接字
    • SOCK_RAW:
      • 一种提供原始套接字的套接字类型,允许应用程序操作下一个上层协议标头。
    • 💡待补充……
  • [in] protocol:
    • 要使用的协议。协议参数的可能选项特定于指定的地址族和套接字类型。
    • 如果指定值为 0,则调用者不希望指定协议,服务提供者将选择要使用的协议。
    • 💡在TCP流式套接字编程中默认写0。

返回值:

  • 如果没有发生错误, 套接字返回一个引用新套接字的描述符。否则,返回一个 INVALID_SOCKET 值,并且可以通过调用WSAGetLastError来检索特定的错误代码 。

    二、绑定地址


简要描述:
bind 函数将本地地址与套接字相关联。
源码:

  1. int WSAAPI bind(
  2. [in] SOCKET s,
  3. [in] const sockaddr *name,
  4. [in] int namelen
  5. );

参数:

  • [in] s
    • 标识未绑定套接字的描述符。
  • [in] name
    • 指向要分配给绑定套接字的本地地址的sockaddr结构的指针
  • [in] namelen
    • name参数指向的值的长度(以字节为单位)。

返回值:

  • 如果没有发生错误, bind返回零。否则,它返回 SOCKET_ERROR,并且可以通过调用WSAGetLastError检索特定的错误代码 。

    三、连接套接字


3.1、客户端连接套接字

简要描述:
connect 函数建立到指定套接字的连接。
源码:

  1. int WSAAPI connect(
  2. [in] SOCKET s,
  3. [in] const sockaddr *name,
  4. [in] int namelen
  5. );

参数:

  • [in] s
    • 标识未连接套接字的描述符。
  • [in] name
    • 指向应建立连接的sockaddr结构的指针
  • [in] namelen
    • name参数指向的sockaddr结构的长度(以字节为单位)。

返回值:

  • 如果没有发生错误,connect返回零。否则,它返回 SOCKET_ERROR,并且可以通过调用WSAGetLastError检索特定的错误代码 。

    3.2、服务端连接套接字

    简要描述:
    accept 函数允许在套接字上进行传入连接尝试。
    **
    1. SOCKET WSAAPI accept(
    2. [in] SOCKET s,
    3. [out] sockaddr *addr,
    4. [in, out] int *addrlen
    5. );
    参数:

返回值:

四、监听套接字


简要描述:
listen 函数将套接字置于侦听传入连接的状态。
源码:

  1. int WSAAPI listen(
  2. [in] SOCKET s,
  3. [in] int backlog
  4. );

参数:

  • [in] s
    • 标识绑定的未连接套接字的描述符。
  • [in] backlog
    • 待处理连接队列的最大长度。一般设置为5.

返回值:

  • 如果没有发生错误, listen返回零。否则,返回SOCKET_ERROR的值,并且可以通过调用WSAGetLastError检索特定的错误代码 。

    五、数据传输


5.1、发送数据——send

简要描述:
send 函数在连接的套接字上发送数据。
**

  1. int WSAAPI send(
  2. [in] SOCKET s,
  3. [in] const char *buf,
  4. [in] int len,
  5. [in] int flags
  6. );

参数:

  • [in] s
    • 标识已连接套接字的描述符。
  • [in] buf
    • 指向包含要传输的数据的缓冲区的指针(char *)
  • [in] len
    • buf参数指向的缓冲区中数据的长度(以字节为单位)。
  • [in] flags
    • 一组指定调用方式的标志。此参数是通过将按位 OR 运算符与以下任何值一起使用来构造的。

返回值:

  • 如果没有发生错误, send返回发送的总字节数,可以小于len参数中请求发送的字节数。否则,返回 SOCKET_ERROR 的值,并且可以通过调用WSAGetLastError检索特定的错误代码 。

  • 5.2、数据接收——recv

    简要描述:
    recv 函数从已连接的套接字或绑定的无连接套接字接收数据。
    **

    1. int WSAAPI recv(
    2. [in] SOCKET s,
    3. [out] char *buf,
    4. [in] int len,
    5. [in] int flags
    6. );

    参数:

  • [in] s

    • 标识已连接套接字的描述符。
  • [out] buf
    • 指向接收传入数据的缓冲区的指针。
  • [in] len
    • buf参数指向的缓冲区的长度(以字节为单位)。
  • [in] flags
    • 一组影响此函数行为的标志。请参阅下面的注释。有关此参数可能值的详细信息,请参阅备注部分。

返回值:
如果没有错误发生, recv返回接收到的字节数,buf参数指向的缓冲区将包含接收到的数据。如果连接已正常关闭,则返回值为零。