加载好文件之后,就可以在CheckIP.cpp文件里加入以下代码了: //-------Begin from ------------ //包含需要使用的头文件 #include "stdafx.h" #include "windows.h" #include <winsock.h> #include "stdio.h" #include "stdlib.h" #include "string.h" void CheckIP(void) //定义CheckIP()函数,用于获取本机IP地址 { WORD wVersionRequested;// WORD类型变量,用于存放Winsock版本的正确值 WSADATA wsaData; char name[255];//定义用于存放获得的主机名的变量 CString ip;//定义IP地址变量 PHOSTENT hostinfo; wVersionRequested = MAKEWORD( 2, 0 ); //调用MAKEWORD()获得Winsock版本的正确值,用于下面的加载Winsock库 if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) { //现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续往下执行 if( gethostname ( name, sizeof(name)) == 0) { //如果成功地将本地主机名存放入由name参数指定的缓冲区中 if((hostinfo = gethostbyname(name)) != NULL) { //这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo为PHOSTENT型的变量,下面即将用到这个结构体 LPCSTR ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); //调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP地址(如192.168.0.1) printf("%s\n",ip);//输出IP地址 } } WSACleanup( );//卸载Winsock库,并释放所有资源 } } int main(int argc, char* argv[])//主函数,程序的入口 { CheckIP();//调用CheckIP()函数获得、输出IP地址 return 0;//由于main()定义为int型,所以应带回一个int型的数值 }
下面接着来看看在C++ Builder 下如何实现,其实两者的思想是一样的,只是在C++ Builder下实现的界面友好点而已,实现方法:打开C++ Builder 5,默认情况下已经新建一个工程,保存这个工程文件就可以了,构造如下面图4所示的界面,在相应之处添入下面的代码即可。 程序代码: //包含头文件 #include <vcl.h> #include <WINSOCK2.H> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } void TForm1::GetHostIpAddress() {// GetHostIpAddress()获得本机IP地址 struct hostent *thisHost; struct in_addr in; char MyName[80]; char *ptr; WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 0 ); err = WSAStartup( wVersionRequested, &wsaData ); if( err != 0 ) return; if(LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { WSACleanup( ); return; } if(gethostname(MyName,80)==SOCKET_ERROR) return; if(!(thisHost=gethostbyname(MyName))) return; memset((void *)&in,sizeof(in),0); in.s_addr=*((unsigned long *)thisHost->h_addr_list[0]); if(!(ptr=inet_ntoa(in))) return; WSACleanup( ); Edit1->Text=AnsiString(ptr);} void __fastcall TForm1::FormCreate(TObject *Sender) { GetHostIpAddress();} void __fastcall TForm1::Button1Click(TObject *Sender)
上一篇:Windows黑客编程基础(上)
下一篇:Win API函数与断点设置
|