如何在启动时获取inet地址?

时间:2012-01-12 15:43:54

标签: c network-programming

我正在写一个教学客户端 - 服务器游戏。我想在服务器启动时,它会在屏幕上打印一个inet地址。我知道一台机器可以有多个inet地址,但我只需要一个,并且可以轻松获得。

编辑: 在测试客户端 - 服务器交互期间,我使用地址127.0.0.1。现在我想测试客户端通过互联网在其他机器上时的客户端 - 服务器交互。要做到这一点,我必须从服务器程序获取IP地址(我希望服务器在屏幕上打印一个inet地址)并将其提供给客户端程序。对不起有误。

1 个答案:

答案 0 :(得分:2)

您需要gethostnamegethostbyname函数,而inet_ntoa才能将其打印出来:

struct hostent *HostEntPtr;
struct in_addr in;
char           Hostname[100];

gethostname( Hostname, sizeof(Hostname) );
HostEntPtr = gethostbyname( Hostname );

if ( HostEntPtr != NULL )
{
  memcpy( &in.s_addr, *HostEntPtr->h_addr_list, sizeof(in.s_addr) );
  printf( "%s\n", inet_ntoa(in) );
}

(假设这是为了获取您的本地IP地址)。

编辑: h_addr_list是一个指针数组。上面的例子得到了第一个,但要看到所有,只需迭代数组:

int i = 0;
while( HostEntPtr->h_addr_list[i] != NULL )
{
  memcpy( &in.s_addr, HostEntPtr->h_addr_list[i], sizeof(in.s_addr) );
  printf( "%s\n", inet_ntoa(in) );
}