- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用以下 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
最佳答案
WSAStringToAddress()
在无法转换请求的地址时失败并返回 WSAEINVAL
。不匹配的系列值并不是发生 WSAEINVAL
错误的唯一方式。正如@ChristianStieber 所述,您正在使用类型转换来传递 8 位 char[]
字符串文字,其中需要 16 位 wchar_t*
指针。那是完全错误的。您正在将垃圾传递给 WSAStringToAddress()
,它会检测到这一点。
当将字符串文字传递给 LPTSTR
值时,您需要使用 TEXT()
宏,例如:
rc = WSAStringToAddress( TEXT("192.168.0.1"), ... );
否则,直接调用Unicode版本的WSAStringToAddress()
,并在字符串字面量前面加上L
前缀,使其成为wchar_t[]
而不是 char[]
,例如:
rc = WSAStringToAddressW( L"192.168.0.1", ... );
关于c++ - WSAStringToAddress 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11694312/
我正在尝试使用以下 C++ 代码从 IPv4 字符串地址填充 sockaddr_in 结构: // WSAStringToAddress struct sockaddr_in sock; int ad
WSAStringToAddress 的 Windows 文档状态: INT WSAAPI WSAStringToAddress( _In_ LPTSTR Addr
当我尝试连接到我的服务器时,我的客户端在执行 WSAStringToAddress 函数期间失败,并出现错误 10022,我认为问题在于我尝试从控制台参数获取 IPv6 地址。控制台参数的格式是::1
我需要检查一个字符串是否是 Windows C++ 应用程序中的有效 IPv4 地址。我使用的代码是: char *ipAddress = ... // get from user input str
我是一名优秀的程序员,十分优秀!