我正在写一个教学客户端 - 服务器游戏。我想在服务器启动时,它会在屏幕上打印一个inet
地址。我知道一台机器可以有多个inet
地址,但我只需要一个,并且可以轻松获得。
编辑: 在测试客户端 - 服务器交互期间,我使用地址127.0.0.1。现在我想测试客户端通过互联网在其他机器上时的客户端 - 服务器交互。要做到这一点,我必须从服务器程序获取IP地址(我希望服务器在屏幕上打印一个inet地址)并将其提供给客户端程序。对不起有误。
答案 0 :(得分:2)
您需要gethostname
和gethostbyname
函数,而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) );
}