WSAAddressToStringA 函数 (winsock2.h)

WSAAddressToString 函数将 sockaddr 结构的所有组件转换为地址的可读字符串表示形式。

这主要用于显示目的。 如果调用方要求特定提供程序执行转换,则应在 lpProtocolInfo 参数中提供相应的 WSAPROTOCOL_INFO 结构。

语法

INT WSAAPI WSAAddressToStringA(
  [in]           LPSOCKADDR          lpsaAddress,
  [in]           DWORD               dwAddressLength,
  [in, optional] LPWSAPROTOCOL_INFOA lpProtocolInfo,
  [in, out]      LPSTR               lpszAddressString,
  [in, out]      LPDWORD             lpdwAddressStringLength
);

参数

[in] lpsaAddress

指向要转换为字符串的 sockaddr 结构的指针。

[in] dwAddressLength

lpsaAddress 参数指向的 sockaddr 结构中地址的长度(以字节为单位)。 dwAddressLength 参数的大小可能因不同的协议而异。

[in, optional] lpProtocolInfo

指向特定提供程序的 WSAPROTOCOL_INFO 结构的指针。 如果此参数 NULL,则调用将路由到支持 lpsaAddress 参数中指示的地址系列的第一个协议的提供程序。

[in, out] lpszAddressString

指向接收人类可读地址字符串的缓冲区的指针。

[in, out] lpdwAddressStringLength

在输入时,此参数指定由 lpszAddressString 参数指向的缓冲区的长度。 长度以字节表示 ANSI 字符串,在 Unicode 字符串的 WCHAR 中表示。 输出时,此参数返回字符串的长度,包括实际复制到 lpszAddressString 参数指向的缓冲区中的 null 终止符。 如果指定的缓冲区不够大,该函数将失败,并出现 WSAEFAULT 的特定错误,并且此参数会用所需的大小进行更新。

返回值

如果未发生错误,WSAAddressToString 返回值为零。 否则,返回值SOCKET_ERROR,可以通过调用 WSAGetLastError来检索特定的错误号。

错误代码 意义
WSAEFAULT
指定的 lpcsAddresslpProtocolInfolpszAddressString 参数指向进程地址空间中并不全的内存,或者 lpszAddressString 参数指向的缓冲区太小。 传入更大的缓冲区。
WSAEINVAL
传递了无效参数。 如果 lpsaAddressdwAddressLengthlpdwAddressStringLength 参数 NULL,则返回此错误。 如果指定的地址不是有效的套接字地址,或者传输提供程序不支持指定的地址系列,则也会返回此错误。
WSAENOBUFS
没有可用的缓冲区空间。
WSANOTINITIALIZED
Winsock 2 DLL 尚未初始化。 在调用任何 Windows 套接字函数之前,应用程序必须先调用 WSAStartup

言论

WSAAddressToString 函数提供与协议无关的地址到字符串转换。 WSAAddressToString 函数采用由 lpsaAddress 参数指向的套接字地址结构,并返回指向 NULL终止字符串的指针,该字符串表示 lpszAddressString 参数中的套接字地址。 虽然 inet_ntoa 函数仅适用于 IPv4 地址,但 WSAAddressToString 函数适用于本地计算机上的 Winsock 提供程序支持的任何套接字地址,包括 IPv6 地址。

如果 lpsaAddress 参数指向 IPv4 套接字地址(地址系列为 AF_INET),则 lpszAddressString 参数指向的缓冲区中返回的地址字符串与“192.168.16.0”中的点符号一样, 以点式十进制表示法表示法表示法表示 IPv4 地址的示例。

如果 lpsaAddress 参数指向 IPv6 套接字地址(地址系列为 AF_INET6),则 lpszAddressString 参数指向的缓冲区中返回的地址字符串采用 Internet 标准格式。 基本字符串表示形式由由冒号分隔的 8 个十六进制数字组成。 连续零个数字的字符串将替换为双冒号。 IPv6 地址的字符串表示形式中只能有一个双冒号。

如果 lpszAddressString 参数指向的缓冲区长度不足以接收套接字地址的字符串表示形式,WSAAddressToString 返回 WSAEFAULT

在 Windows XP 上添加了对使用 WSAAddressToString 函数的 IPv6 地址的支持,Service Pack 1(SP1)及更高版本。 还必须在本地计算机上安装 IPv6,WSAAddressToString 函数才能支持 IPv6 地址。

Windows Phone 8: Windows Phone 8 及更高版本的 Windows Phone 应用商店应用支持 WSAAddressToStringW 功能。

Windows 8.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本上的 Windows 应用商店应用支持 WSAAddressToStringW 函数。

注意

winsock2.h 标头将 WSAAddressToString 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP,Windows 8.1 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 winsock2.h
Ws2_32.lib
DLL Ws2_32.dll

另请参阅

Inetntop

InetPton

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

WSAPROTOCOL_INFO

WSAStartup

WSAStringToAddress

inet_addr

inet_ntoa

sockaddr