使用 Winsock API gethostname 與 gethostbyname 可輕鬆取得本機主機名稱與 IP 位址。本文提供 C++Builder 範例程式,包含 WinSock 初始化與清理流程。
void __fastcall TForm1::Button1Click(TObject *Sender) {
hostent* p;
char s[128];
char* p2;
// 取得電腦名稱
gethostname(s, 128);
p = gethostbyname(s);
Memo1->Lines->Add(p->h_name);
// 取得 IP 位址
p2 = inet_ntoa(*((in_addr*)p->h_addr));
Memo1->Lines->Add(p2);
}
void __fastcall TForm1::FormCreate(TObject *Sender) {
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData); // 啟動 WinSock
}
void __fastcall TForm1::FormDestroy(TObject *Sender) {
WSACleanup(); // 清理 WinSock
}
gethostname 取得本機主機名稱(NetBIOS 名稱)。gethostbyname 解析主機名稱回傳 hostent 結構,h_addr 為第一個 IP 位址(網路位元組序)。inet_ntoa 將 in_addr 轉為點分十進位字串。h_addr_list 包含所有 IP,本例僅取第一個。