我正在尝试使用以下 C++ 代码从 IPv4 字符串地址填充 sockaddr_in 结构:
// WSAStringToAddress
struct sockaddr_in sock;
int addrSize = sizeof( struct sockaddr_in );
memset( &sock, 0, addrSize );
sock.sin_family = AF_INET;
rc = WSAStringToAddress( (LPWSTR) "192.168.0.1",
AF_INET,
NULL,
(LPSOCKADDR) &sock,
&addrSize );
if ( rc != 0 )
{
rc = WSAGetLastError();
printf( "WSAStringToAddress: error=[%d]\n", rc );
}
它失败,错误代码为 10022,即 WSAEINVAL。在http://msdn.microsoft.com/en-us/library/windows/desktop/ms742214%28v=vs.85%29.aspx上,它指出当 sockaddr_in 的地址系列未设置为 AF_INET 或AF_INET6,我已经清楚地做到了。
我在 Windows Server 2008 R2 SP1 上运行 Visual C++ 2008 Express Edition,但我没有使用较新的地址转换功能,因为我需要从 Windows XP/Windows Server 2000 开始向后兼容。
有谁知道如何解决这个问题/我的代码有什么问题?感谢您提供的任何解决方案:D
编辑:我发现使用 WSAStringToAddressA 允许使用 ASCII char 而不是 tchar