假设主机不是多宿主机,即最多只有一块网卡和一个动态IP#include <winsock.h>void __fastcall TForm1::Button3Click(TObject *Sender){ WSAData wsaData; if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0) //初始化WINSOCK调用 { MessageBox(NULL,"Wrong WinSock Version","Error",MB_OK); return; }
char HostName[80]; LPHOSTENT lpHostEnt; struct in_addr addr[2]; for (int i=0; i<2; i++) memset(&addr[i],0,sizeof(in_addr)); //对in_addr结构清0,以利后面填写
if (gethostname(HostName, sizeof(HostName)) == SOCKET_ERROR) { // 得到本主机名 MessageBox(NULL, "Can't getting local host name.","Error", MB_OK); return; }
lpHostEnt = gethostbyname(HostName);//利用得到的主机名去获得主机结构 if (!lpHostEnt) { MessageBox(NULL, "Yow! Bad host lookup.","Error", MB_OK); return; }
for (int i=0; lpHostEnt->h_addr_list[i]!=0; i++) //从主机地址表中得到IP地址 memcpy(&addr[i],lpHostEnt->h_addr_list[i],sizeof(in_addr));
Memo1->Lines->Add(HostName); Memo1->Lines->Add(inet_ntoa(addr[0])); Memo1->Lines->Add(inet_ntoa(addr[1]));
WSACleanup(); //释放WINSOCK调用}