本文提供的方法是一個比較完整的解決方案,並附有詳細的實現細節。其實,如果你熟悉Windows的Sockets API,並了解一些底層的Winsock知識。那麼要獲得某台機器的IP地址並不是什麼難事。一台機器可以裝多塊網卡,因此它就可能有多個IP地址。目前很多發燒友的PC機都裝有多塊網卡。其中一塊網卡與調制解調器(MODEM)或者ADSL適配器相連,另一塊與家裡的局域網(LAN)相連。對於有寬帶連接條件的家庭,這更是一種典型的配置。任何事情,一旦你知道了解決的方法,一切都會變得如此簡單。下面是本文提供的一個簡單的控制台程序(程序名為getip1),其功能就是顯示本機的IP地址。如圖一所示:
圖一 getip1的運行畫面
下面是 getip1 程序的代碼,很簡單:
////////////////////////////////////////////////////////////////
// getip1.cpp
//
// 本程序報告本機上每一塊網卡的IP地址
// 命令行編譯命令為:
//
// cl getip1.cpp wsock32.lib
//
// 請一定要在環境變量中正確指定LIB庫的路徑;可以運行vcvars32.bat
//
#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>
int main()
{
////////////////
// 初始化 Windows sockets API. 要求版本為 version 1.1
//
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s ", WSAGetLastError());
return -1;
}
//////////////////
// 獲得主機名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {