技術文章 > 撥號上網IP地址的檢知

撥號上網IP地址的檢知

2020-02-27 12:10

文檔管理軟件,文檔管理系統,知識管理系統,檔案管理系統的技術資料:

隨著INTERNET在世界范圍內的迅速普及,上網的人數也越來越多。其中,絕大多數人是通過普通電話線撥號上網的。我們知道,每一臺上網的計算機,不論是用何種方式上網,都被分配了一個或多個獨立無二的IP地址。對于撥號上網的用戶,一般是由其ISP在其每次撥號上網時動態分配一個IP地址,這個地址可能每次都不相同(其原因主要是為了充分利用有限資源)。那么,我們能否通過某種方法隨時方便地檢知自己上網時的IP地址呢?答案是肯定的。下面我們就用C++BUILDER編制一個小巧的程序來實現這種功能。(注:本程序在局域網中也同樣能運行)
---- 首先用BCB的FILE菜單下的New Application創建一個新項目,取名為Ipcheck.bpr。
---- 然后,在窗體FORM1上添加五個標簽(LABEL)和兩個按鈕(BUTTON),如圖所示。
---- 接下來,雙擊窗體的OnCreate事件,在其中加上以下程序:
void __fastcall TForm1::FormCreate(Tobject *Sender)
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{ //初始化WINSOCK調用
MessageBox(NULL,“Wrong WinSock
Version“,“Error“,MB_OK);
return ;
}
Refresh1Click(Sender); //程序一開始,就調檢知IP地址
}
再雙擊Refresh按鈕,在其中加上以下程序
void __fastcall TForm1::Refresh1Click(Tobject *Sender)
//刷新IP地址
{
char HostName[80];
LPHOSTENT lpHostEnt;
struct in_addr addr[2];
//本程序假設主機不是多宿主機,即最多只有
// 一塊網卡和一個動態IP
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 ;
}
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++)
//從主機地址表中得到IP地址
{
memcpy(&addr[I],lpHostEnt- >h_addr_list[I],sizeof(in_addr));
}
Label4- >Caption=inet_ntoa(addr[0]);
Label5- >Caption=inet_ntoa(addr[1]);
}
再雙擊Refresh按鈕,在其中加上以下程序
void __fastcall TForm1::Button2Click(Tobject *Sender)
{
WSACleanup(); //釋放WINSOCK調用
Close();
}
---- 最后,不要忘了在程序頭部加上#include<winsock.h>.....哦。
---- 好了,程序完成了,編譯后就可運行了。本程序在中文WIN95/NT4.0下編譯通過。
体彩7星彩规则 云南星悦麻将 宝牛e配资 熊猫麻将官方版 山东十一选五开奖号 股票分析 牛市快讯每天推送q 高手只炒一只股票19年钒价2019年为何大跌 下载微乐捉鸡麻将 六六山西麻将新版本的 游戏麻将单机版 广东十一选五开奖查 股票融资时间可多长 天天策略配资 快乐十分技巧出号规 熊猫棋牌安卓版下载 出彩速配 3d历史开奖结果查