急求毕设问题,怎样获得本机ipv6地址(winsock下)?
这个问题已经纠缠好些天了,郁闷啊..
感觉winsock中对ipv6的地址支持的并不好,虽然官方的解释是getaddrinfo和getnameinfo已经可以完成所有的地址解析工作,但是个人觉得用起来很不方便,如inet_ntoa之类的简单转换都很难实现,哪位高手讲一讲吧,下面是代码:
char szHostName[256];
gethostname(szHostName,256);
struct addrinfo hints2, *res2=NULL;
memset(&hints2,0,sizeof(hints2));
hints2.ai_flags=AI_CANONNAME;
hints2.ai_family=AF_INET6;
rc=getaddrinfo(szHostName,"10000",&hints2,&res2);
char *v6IP=res2->ai_addr->sa_data;
char hostName[256];
char servInfo[256];
if ((getnameinfo(res2->ai_addr,
res2->ai_addrlen,
hostName,
256,
servInfo,
256,
NI_NUMERICHOST | NI_NUMERICSERV)) != 0)
{
printf("getnameinfo() failed.\n");
printf("Error #: %ld\n", WSAGetLastError());
return 0;
}
这样只能获得本机的回路地址,即::1
怎样获得本机的链路本地和全球单播地址呢,希望是和网卡无关的,即不需要选择网卡index,十分感谢!
感觉winsock中对ipv6的地址支持的并不好,虽然官方的解释是getaddrinfo和getnameinfo已经可以完成所有的地址解析工作,但是个人觉得用起来很不方便,如inet_ntoa之类的简单转换都很难实现,哪位高手讲一讲吧,下面是代码:
char szHostName[256];
gethostname(szHostName,256);
struct addrinfo hints2, *res2=NULL;
memset(&hints2,0,sizeof(hints2));
hints2.ai_flags=AI_CANONNAME;
hints2.ai_family=AF_INET6;
rc=getaddrinfo(szHostName,"10000",&hints2,&res2);
char *v6IP=res2->ai_addr->sa_data;
char hostName[256];
char servInfo[256];
if ((getnameinfo(res2->ai_addr,
res2->ai_addrlen,
hostName,
256,
servInfo,
256,
NI_NUMERICHOST | NI_NUMERICSERV)) != 0)
{
printf("getnameinfo() failed.\n");
printf("Error #: %ld\n", WSAGetLastError());
return 0;
}
这样只能获得本机的回路地址,即::1
怎样获得本机的链路本地和全球单播地址呢,希望是和网卡无关的,即不需要选择网卡index,十分感谢!
...全文
相关推荐
获取本机网卡信息(包括ipv6 地址信息)
获取本机各个网卡信息(包括mac地址,ipv6 地址等信息)
使用Winsock控件获取本机主机名与IP地址实战详解
主机名是一个由用户或系统管理员指定的字符串,用于标识一台计算机在网络中的逻辑名称。例如,在企业内网中,某台服务器可能被命名为,其中不仅包含主机本身的名字server01,还通过域名结构表达了所属部门(hr)、公司(company)及顶级域(com)。这种层次化命名增强了组织管理能力。从技术角度看,主机名并不直接参与数据包转发,而是通过域名系统(DNS)或其他本地机制解析为对应的IP地址后,才可用于实际通信。然而,它在以下几个方面具有不可替代的作用:可读性增强。
获得本机IP地址获得本机IP地址获得本机IP地址
获得本机IP地址获得本机IP地址获得本机IP地址获得本机IP地址获得本机IP地址
winsocket编程获得本机IP地址和计算机名称
利用Winsock网络信息获取函数编写一个主机名、IP地址的获取GUI程序
IPV6获得本机地址
IPV6获得本机地址,支持IPV6,也支持IPV4.


网络编程
