在编写基于sock的网络程序时,有时需枚举系统中绑定的所有IP地址,在一般控件无法解决些问题的情况下,可使用如下方法一试:
一、基于winsock的方法,例程如下(修改自网上一个名为“GetIP”的程序源码):
// GetIP.cpp : Defines the entry point for the console application.
// 修改:大漠 2005.12.26
#include "stdafx.h"
#include <stdio.h>
#include <winsock.h>
#include <windows.h>
#include <string.h>
void main()
{
struct hostent *thishost;
struct in_addr in;
char MYName[80];
char *Ptr;
WORD wVersionRequested;
WSADATA wsaData;
int err;
int i,n; //循环变量
wVersionRequested=MAKEWORD(2, 0); //设置winsock版本
err = WSAStartup(wVersionRequested, &wsaData); //启用winsock支持(增加winsock引用计数)
if(err != 0)
{
exit(0);
}
gethostname(MYName, 80); //取得主机名
thishost = gethostbyname(MYName); //取得主机的信息(IP等)
memset((void *)&in, sizeof(in), 0);
//取得循环次数(IP地址数)
n=strlen(*thishost->h_addr_list);
n=n/2;
for(i=0;i<n;i++)
{
in.s_addr = *((unsigned long *)thishost->h_addr_list[i]);
Ptr = inet_ntoa(in);
printf("IP地址%d:%s",i+1,Ptr);
}
WSACleanup(); //卸载winsock动态库(减少引用计数)
}