C++ 将IP地址从sockaddr\u in6转换为in\u addr
下面的转换工作正常,但当我使用IPV6时如何处理C++ 将IP地址从sockaddr\u in6转换为in\u addr,c++,sockets,visual-c++,C++,Sockets,Visual C++,下面的转换工作正常,但当我使用IPV6时如何处理 sockaddr foo; in_addr_t ip_address = ((sockaddr_in)foo).sin_addr.s_addr; 以下代码失败: sockaddr foo; in_addr_t ip_address = ((sockaddr_in6)foo).sin6_addr.s_addr; Error 1 error C2679: binary '=' : no operator found which takes
sockaddr foo;
in_addr_t ip_address = ((sockaddr_in)foo).sin_addr.s_addr;
以下代码失败:
sockaddr foo;
in_addr_t ip_address = ((sockaddr_in6)foo).sin6_addr.s_addr;
Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'IN6_ADDR' (or there is no acceptable conversion)
哪里是将
sockaddr\u in
转换为in\u addr
的代码?对不起,不行。IPv6地址无法转换为\u addr中的结构,除非它是IPv4映射地址时发生了特殊情况
IPv6主机地址需要存储16个字节,对于主机部分,在相同的头文件中包含了struct in6_addr
。但是,此外,IPv6地址还包含除主机之外的作用域,主机可能对链路本地地址至关重要。因此,仅仅使用主机部件是不够的
您应该阅读双栈或仅IPv6应用程序编程的一般手册。特别是,struct sockaddr\u storage
作为两个地址的公共存储,以及getaddrinfo
函数,该函数用于解析名称(仅数字或NETDB)。IPv6和IPv4地址不能以这种方式转换。是否需要以IPv6格式显示的IPv4地址?您可能需要读取。