如何获得本机的IP地址?

ljm 2000-03-05 02:37:00
用VC++编程,如何获得本机的IP地址?包括拨号上网的计算机和专线上网的计算机。
...全文
3984 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
happywolf 2000-03-07
  • 打赏
  • 举报
回复
/*-----------------------------------------------------------
* 函数: GetHostID()
*
* 功能: 用下面的方法得到本机的机器名和IP地址,并分别放在两个参数中:
* 1. 调用gethostname()得到本机的机器名,试着用gethostbyname()
* 解析本机的IP地址
* 2. 如果上述方法失败,则采用下面的策略:
* - 创建一个 UDP socket
* - 连接 UDP socket 到任意一个指定的IP地址和端口
* - 调用 getsockname() 得到本机的IP地址
*-----------------------------------------------------------*/
void CSrvSocket::GetHostID (char* lpAddr,char* lpHostName)
{
char szLclHost [MAXHOSTNAME];
LPHOSTENT lpstHostent;
SOCKADDR_IN stLclAddr;
SOCKADDR_IN stRmtAddr;
int nAddrSize = sizeof(SOCKADDR);
SOCKET hSock;
int nRet;

/* 初始化本机地址*/
stLclAddr.sin_addr.s_addr = INADDR_ANY;

/* 得到本机的机器名 */
nRet = gethostname(szLclHost, MAXHOSTNAME);
if (nRet != SOCKET_ERROR)
{
/* 解析本机的IP地址*/
lpstHostent = gethostbyname((LPSTR)szLclHost);
if (lpstHostent)
{
stLclAddr.sin_addr.s_addr = *((u_long FAR*) (lpstHostent->h_addr));
}
}

/* 如果没有解析出来,采用第二种策略 */
if (stLclAddr.sin_addr.s_addr == INADDR_ANY)
{
/* 得到一个 UDP socket */
hSock = socket(AF_INET, SOCK_DGRAM, 0);
if (hSock != INVALID_SOCKET)
{
/* 连接到任意IP地址和端口 (NOT loopback) */
stRmtAddr.sin_family = AF_INET;
stRmtAddr.sin_port = htons(IPPORT_ECHO);
stRmtAddr.sin_addr.s_addr = inet_addr("128.127.50.1");
nRet = connect(hSock,
(LPSOCKADDR)&stRmtAddr,
sizeof(SOCKADDR));
if (nRet != SOCKET_ERROR)
{
/* 获取本机地址 */
getsockname(hSock,
(LPSOCKADDR)&stLclAddr,
(int FAR*)&nAddrSize);
}
closesocket(hSock);
}
}
strcpy(lpHostName,szLclHost);
strcpy(lpAddr,(inet_ntoa(stLclAddr.sin_addr)));
} /* GetHostID() *
tsc 2000-03-06
  • 打赏
  • 举报
回复
可以利用gethostname和gethostbyname获得本机的IP地址,,gethostbyname返回一HOSTENT机构的指针,HOSTENT机构定义如下:

struct hostent{
char FAR * h_name;
char FAR * FAR * h_aliases;
short h_addrtype;
short h_length;
char FAR * FAR * h_addr_list;
}
h_addr_list 是一个以空指针结尾的主机地址列表。下面是一个得到本机地址的函数 :

//
//得到本地的IP地址
//
unsigned long GetLocalAddr()
{
unsigned long broadcastIP = 0;

char bufName[20];
unsigned long * pLocalIP=NULL;
unsigned long subMask=0;
HOSTENT *pHost = NULL;

gethostname(bufName,20);
pHost = gethostbyname(bufName);
pLocalIP = (unsigned long *)pHost->h_addr_list[0];
return *pLocalIP;
}
Sniper 2000-03-06
  • 打赏
  • 举报
回复
BYTE *p;
char temp[100];
struct hostent *hp;
char ip[16];

if(gethostname(temp, sizeof(temp))== 0)
{
if((hp =gethostbyname(temp))!=0)
{
p =(BYTE *)hp->h_addr;
wsprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
MessageBox(NULL, ip, "IP Address", MB_OK);
}
}
deepwater 2000-03-06
  • 打赏
  • 举报
回复
CString _GetLocalIP()
{
char szHostName[128];
CString str;

if( gethostname(szHostName, 128) == 0 )
{
// ホストのアドレスを取得する
struct hostent * pHost;
int i;

pHost = gethostbyname(szHostName);

for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )
{
int j;

for( j = 0; j < pHost->h_length; j++ )
{
CString addr;

if( j > 0 )
str += ".";

addr.Format("%u", (unsigned int)((unsigned
char*)pHost->h_addr_list[i])[j]);
str += addr;
}
}
}
return str;
}
SoftDIY 2000-03-05
  • 打赏
  • 举报
回复
不算晚:)

Get hostname and ip address of local computer(2) in codeguru

--------------------------------------------------------------------------------
This article was contributed by Jaroslav Pisk .
Following is a code that gets local machine IP addresses. The advantages over the article by Jeff Lundgren are that my code recognises ALL IP addresses and is ready for IPv6 ;-)


char szHostName[128];

if( gethostname(szHostName, 128) == 0 )
{
// Get host adresses
struct hostent * pHost;
int i;

pHost = gethostbyname(szHostName);

for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )
{
CString str;
int j;

for( j = 0; j < pHost->h_length; j++ )
{
CString addr;

if( j > 0 )
str += ".";

addr.Format("%u", (unsigned int)((unsigned
char*)pHost->h_addr_list[i])[j]);
str += addr;
}
// str now contains one local IP address - do whatever you want to do with it (probably add it to a list)
}
}



Firing_Sky 2000-03-05
  • 打赏
  • 举报
回复
来晚了 ^_^
mickey 2000-03-05
  • 打赏
  • 举报
回复
你可以用gethostname( )来获取本机IP!
FlyingBoy_qhd 2000-03-05
  • 打赏
  • 举报
回复
先gethostname()
xenogear 2000-03-05
  • 打赏
  • 举报
回复
gethostbyname
然后
inet_ntoa

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧