下面这段是从网上找到的代码:
void CMyDlg::GetHostAddress(CString &strIPAddr)
{
char HostName[100];
gethostname(HostName, sizeof(HostName));// 获得本机主机名.
hostent* hn;
hn = gethostbyname(HostName);//根据本机主机名得到本机ip
strIPAddr=inet_ntoa(*(struct in_addr *)hn->h_addr_list[0]);//把ip换成字符串形式
}
摘自:http://blog.163.com/lrh_079/blog/static/5543107320081233321134/
但是很可惜,在vs2013下报错,gethostbyname不能用,查了MSDN,建议弃用,让用getaddrinfo代替,
所以,又调试了下,下面这个可以成功获取本机IP
CString strIPAddr;
char HostName[100];
gethostname(HostName, sizeof(HostName));// 获得本机主机名.
struct addrinfo *res;
struct addrinfo hints;
int ret;
struct sockaddr_in *addr;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
ret = getaddrinfo(HostName, NULL, &hints, &res);
char ipbuf[16];
addr = (struct sockaddr_in *)res->ai_addr;
strIPAddr += inet_ntop(AF_INET, &addr->sin_addr, ipbuf, 16);//将IP地址的二进制转换为十进制
freeaddrinfo(res);
AfxMessageBox(strIPAddr);