有关获取主机的IPv4地址的问题? [英] Question about getting IPv4 address of a host?

查看:56
本文介绍了有关获取主机的IPv4地址的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello guys

我使用windows函数getaddrinfo来获取主机的IPv4地址。

  struct  addrinfo * aiList = NULL; 
struct addrinfo aiHints;
// 在此初始化aiHints
aiHints.ai_family = AF_INET;
int iResult = getaddrinfo(szHostName,NULL,& aiHints,& aiList);
const struct addrinfo * aiPtr = aiList;
while (aiPtr!= NULL)
{
const < span class =code-keyword> struct sockaddr * pSockAddr = aiPtr-> ai_addr;
// 此处打印pSockAddr代码的内容
aiPtr = aiPtr-> ai_next;
}


$ s $ b struct sockaddr的声明是:

  struct  sockaddr {
ushort sa_family;
char sa_data [ 14 ];
};

函数成功,本地主机的aiPtr-> ai_addr-> sa_data的值如下

{0,0,127,0 ,0,1,0,0,0,0,0,0,0,0,0,0}

为什么这里有两个前导零?

可能是ai_addr是struct sockaddr_in类型而且两个前导零是sockaddr_in的成员sin_port?

  struct  sockaddr_in {
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero [ 8 ];
}

我很困惑。任何机构都可以澄清发生了什么事吗?

提前致谢



编辑:原来的主题是:

关于get addrinfo返回的问题getaddrino

解决方案

当你使用 AF_INET ai_addr 成员指向 sockaddr_in 类型的对象。看看这里的示例 [< a href =http://msdn.microsoft.com/en-us/library/windows/desktop/ms737530(v=vs.85).aspx\"target =_ blanktitle =New Window> ^ ]。

Hello guys
I use windows function getaddrinfo to get the IPv4 address of a host.

struct addrinfo * aiList = NULL;
struct addrinfo aiHints;
//initialize aiHints here
aiHints.ai_family = AF_INET;
int iResult = getaddrinfo( szHostName, NULL, &aiHints, &aiList );
const struct addrinfo * aiPtr = aiList;
while ( aiPtr != NULL )
{
    const struct sockaddr * pSockAddr = aiPtr->ai_addr;
//  print contents of pSockAddr code here
    aiPtr = aiPtr->ai_next;
}


declaration for struct sockaddr is:

struct sockaddr {
 ushort sa_family;
 char sa_data[14];
};

The function succeed and the values of aiPtr->ai_addr->sa_data for localhost is as follows
{ 0, 0, 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
Why two leading zeros here?
May it be ai_addr is of type struct sockaddr_in and The two leading zeros is member sin_port of sockaddr_in?

struct sockaddr_in{
   short sin_family;
   unsigned short sin_port;
   struct in_addr sin_addr;
   char sin_zero[8];
}

I'm confused. can any body clarify whats happening?
Thanks in advance

Edit: the original subject was this:
Question about struct addrinfo returned by getaddrino

解决方案

When you use AF_INET the ai_addr member points to an object of type sockaddr_in. Take a look at the example here [^].


这篇关于有关获取主机的IPv4地址的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆