WinSocket 常用函数及结构
常用结构定义及函数 WSADATA sockaddr_in fd_set timeval WSAStartup WSACleanup htons htonl ntohs ntohl inet_addr inet_ntoa socket closesocket bind listen connect accept select send recv send 、sendto 、recv 、recvfrom函数在不同模式下的不同表现 ### WinSocket 常用函数及结构 #### 一、WSADATA 结构 **定义**: WSADATA 结构用于在初始化 WinSock 库时获取有关该库的信息。 **成员变量**: - `wVersion`:WORD 类型,表示库文件建议的应用程序使用的版本。 - `wHighVersion`:WORD 类型,表示库文件支持的最高 WinSock 版本。 - `szDescription`:BYTE 类型,长度为 WSADESCRIPTION_LEN+1 的数组,存储库描述字符串。 - `szSystemStatus`:BYTE 类型,长度为 WSASYS_STATUS_LEN+1 的数组,存储系统状态字符串。 - `iMaxSockets`:WORD 类型,表示同时支持的最大套接字数量。 - `iMaxUdpDg`:WORD 类型,该字段在 2.0 版本中已被取消。 - `lpVendorInfo`:DWORD 类型,在 2.0 版本中已被取消。 #### 二、sockaddr_in 结构 **定义**: sockaddr_in 结构用于存储 Internet 协议 (IP) 地址信息。 **成员变量**: - `sin_family`:WORD 类型,地址家族标识符,AF_INET 表示 IPv4 地址。 - `sin_port`:WORD 类型,端口号,采用网络字节顺序。 - `sin_addr`:in_addr 类型,IPv4 地址,采用网络字节顺序。 - `sin_zero`:BYTE 类型,长度为 8 的数组,保留为零。 #### 三、fd_set 结构 **定义**: fd_set 结构用于 select 函数中,存储感兴趣的套接字句柄集合。 **成员变量**: - `fd_count`:DWORD 类型,表示 fd_array 中存放的套接字句柄数量。 - `fd_array`:SOCKET 类型,长度为 FD_SETSIZE 的数组,存储套接字句柄列表。 #### 四、timeval 结构 **定义**: timeval 结构用于表示时间间隔。 **成员变量**: - `tv_sec`:DWORD 类型,表示秒数。 - `tv_usec`:DWORD 类型,表示微秒数。 #### 五、WSAStartup 函数 **定义**: WSAStartup 函数用于装入并初始化 WinSock 动态链接库。 **参数**: - `vVersionRequired`:指定动态链接库将支持哪个版本的 WinSock 函数。 - `lpWSAData`:指向 WSADATA 结构的指针,用于返回动态链接库的详细信息。 **返回值**: - 成功返回 0。 - 失败返回错误代码,包括但不限于: - `WSASYSNOTREADY`:网络子系统未准备好。 - `WSAVERNOTSUPPORTED`:不支持指定的版本。 - `WSAEINPROGRESS`:另一个阻塞方式的 WinSock 1.1 正在进行中。 - `WSAEPROCLIM`:WinSock 已达到所支持的最大任务数。 - `WSAEFAULT`:输入参数 lpWSAData 指定的指针无效。 #### 六、WSACleanup 函数 **定义**: WSACleanup 函数用于释放 WinSock 动态链接库资源。 **参数**:无 **返回值**: - 成功返回 0。 - 失败返回 SOCKET_ERROR。 #### 七、字节序转换函数 **定义**: 这些函数用于在主机字节序与网络字节序之间转换整数值。 - **htons**: 将 16 位主机字节序转换为网络字节序。 - **htonl**: 将 32 位主机字节序转换为网络字节序。 - **ntohs**: 将 16 位网络字节序转换为主机字节序。 - **ntohl**: 将 32 位网络字节序转换为主机字节序。 **参数**: - 对于 ht* 函数,输入参数是主机字节序的整数。 - 对于 nto* 函数,输入参数是网络字节序的整数。 **返回值**: - 返回转换后的整数值。 #### 八、IP 地址处理函数 **定义**: 这些函数用于处理 IP 地址。 - **inet_addr**: 将点分十进制 IP 地址字符串转换为 32 位整数(网络字节序)。 - **inet_ntoa**: 将 32 位整数(网络字节序)转换为点分十进制 IP 地址字符串。 **参数**: - 对于 inet_addr 函数,输入参数是指向 IP 地址字符串的指针。 - 对于 inet_ntoa 函数,输入参数是 32 位整数。 **返回值**: - inet_addr 成功返回转换后的 IP 地址(32 位整数),失败返回 INADDR_NONE。 - inet_ntoa 返回 IP 地址字符串。 #### 九、套接字创建与操作函数 **定义**: 这些函数用于创建、管理套接字。 - **socket**: 创建一个新的套接字。 - **closesocket**: 关闭一个套接字。 - **bind**: 将套接字绑定到特定的本地地址。 - **listen**: 使套接字进入监听状态。 - **connect**: 连接到远程主机。 - **accept**: 接受传入的连接请求。 - **select**: 监控一个或多个套接字的可读写性。 **参数**: - socket、bind、listen、connect 和 accept 函数通常接受套接字类型和地址等参数。 - closesocket 只接受一个参数,即待关闭的套接字句柄。 - select 函数接受多个参数,包括一个时间值以及 fd_set 结构体来跟踪感兴趣的套接字状态。 **返回值**: - socket 成功返回新的套接字句柄。 - closesocket、bind、listen、connect 和 accept 成功返回特定值,失败返回 SOCKET_ERROR。 - select 成功返回准备就绪的套接字数量,失败返回 SOCKET_ERROR。 #### 十、数据传输函数 **定义**: 这些函数用于发送和接收数据。 - **send**: 发送数据到连接的套接字。 - **recv**: 从连接的套接字接收数据。 - **sendto**: 向指定的地址发送数据。 - **recvfrom**: 从指定的地址接收数据。 **参数**: - send 和 recv 需要指定套接字句柄、数据缓冲区、数据长度和标志。 - sendto 和 recvfrom 还需要指定地址和地址长度。 **返回值**: - 成功返回发送或接收的字节数。 - 失败返回 SOCKET_ERROR 或 0(对于 recv*,当连接关闭时)。 **不同模式下的表现**: - 在非阻塞模式下,如果数据无法立即发送或接收,则这些函数会立即返回 SOCKET_ERROR,并且 WSAGetLastError() 返回 WSAEWOULDBLOCK。 - 在阻塞模式下,如果数据无法立即发送或接收,这些函数将等待直到数据可以发送或接收。 以上就是 WinSocket 常用函数及结构的主要内容。这些函数和结构是开发基于 Windows 平台的网络应用程序的基础。熟悉它们的使用方法对于理解和编写高效的网络代码至关重要。
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助