首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 實作撥號上網 IP 位址偵測工具

     編輯:關於C++

隨著網際網路的普及,撥號上網曾是大多數用戶的主要接入方式。每台連網電腦都擁有唯一的 IP 位址,而撥號用戶通常由 ISP 動態分配,每次連線的 IP 可能不同。本文示範如何使用 C++Builder 開發一個小型工具,即時偵測並顯示本機的 IP 位址,同樣適用於區域網路環境。

專案建立與介面佈局

首先在 C++Builder 中建立新專案,命名為 IPcheck.bpr。在主視窗 Form1 上放置五個標籤(Label)與兩個按鈕(Button),分別用於顯示主機名稱、IP 位址及觸發重新整理與關閉動作。

核心程式碼實作

在表單的 OnCreate 事件中初始化 WinSock,並立即呼叫重新整理函式:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    WSAData wsaData;
    if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {
        MessageBox(NULL, "Wrong WinSock Version", "Error", MB_OK);
        return;
    }
    Refresh1Click(Sender); // 程式啟動即偵測 IP
}

Refresh 按鈕的點擊事件負責取得主機名稱並解析 IP 位址:

void __fastcall TForm1::Refresh1Click(TObject *Sender)
{
    char HostName[80];
    LPHOSTENT lpHostEnt;
    struct in_addr addr[2];

    for (int i = 0; i < 2; i++)
        memset(&addr[i], 0, sizeof(in_addr));

    if (gethostname(HostName, sizeof(HostName)) == SOCKET_ERROR) {
        MessageBox(NULL, "Can't getting local host name.", "Error", MB_OK);
        return;
    }
    Label3->Caption = HostName;

    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++)
        memcpy(&addr[i], lpHostEnt->h_addr_list[i], sizeof(in_addr));

    Label4->Caption = inet_ntoa(addr[0]);
    Label5->Caption = inet_ntoa(addr[1]);
}

關閉按鈕釋放 WinSock 資源並結束程式:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    WSACleanup();
    Close();
}

記得在程式碼最上方加入 #include <winsock.h>。編譯執行後,即可在中文 Windows 95/NT 4.0 環境下正常運作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved