如何通过一个编程获得IP地址归属地的最简单办法
有時在網站應用程序中要顯示對方的IP地址與它的歸屬地,一般來說,有下列幾種辦法。
1, 采用IP地址數據庫。本地查詢
??? 這個辦法的優點是:查詢速度最快,不依賴于外部網站。
??? 缺點是:要編寫一定的數據庫查詢代碼,而且你的數據庫如果不是很新,則某些IP的查詢結果會不正確。
??????? (有需要的可以在此留言,大蝦米可以提供一個能找到的最新的IP地址庫)
2,采用WebService查詢。
?????? 這里有一個最好的WebService
????? http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D
??? 缺點是:要編寫一定的WebService查詢代碼。而且查詢的結果是XML形式,需要進一步的解析。
3,調用某些查詢網站的代碼,如 http://www.ip.cn/
??? 缺點是:它會返回相當多的無關代碼,難以解析出你想要的東西。
4, 調用氣動隔膜泵網站鏈接直接查詢
比如
http://www.tianqizx.cn/ip.aspx?ip=202.105.19.49
網站會直接返回查詢的結果,如 “ 廣東省佛山市 三水區”
不會有任何的雜信息干擾
win32 API并沒有提供直接得到CPU占用率的氣動隔膜泵函數,但提供GetProcessTimes()函數可以得到進程占用的CPU時間,通過和實際時間的流逝相比,可以得到某進程占用CPU的比率好了,
下面就是完整的C++代碼。
// 得到當前進程的CPU占用率
class GetCPUPercentage
{
? private:
??? CRITICAL_SECTION cs;? // 供多線程同步的臨界區變量
??? HANDLE hd;??? // 空閑進程的句柄
??? DWORD t1;???? // 時間戳
??? int percent;? // 最近一次計算的CPU占用率
??? __int64 oldp;
??? __int64 FileTimeToInt64(const FILETIME& time);
??? int GetTime(__int64& proc);? // 得到進程占用的CPU時間
? public:
??? GetCPUPercentage();
??? ~GetCPUPercentage();
??? int Get();? // 得到CPU占用率
};
GetCPUPercentage::GetCPUPercentage()
{
? InitializeCriticalSection(&cs);? // 初始化線程臨界區變量
? percent = 0;?? // 初始的占用率
? DWORD pid = GetCurrentProcessId();?? // 得到當前進程id
? hd? = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);? // 通過id得到進程的句柄
? if( hd==NULL ){
???? return;
? }
? // 得到初始時刻的值
? GetTime(oldp);
? t1 = GetTickCount();
}
GetCPUPercentage::~GetCPUPercentage()
{
? if( hd!=NULL ){
???? CloseHandle(hd);
? }
? DeleteCriticalSection(&cs);
}
// 時間格式轉換
__int64 GetCPUPercentage::FileTimeToInt64(const FILETIME& time)
{
? ULARGE_INTEGER tt;
? tt.LowPart = time.dwLowDateTime;
? tt.HighPart = time.dwHighDateTime;
? return(tt.QuadPart);
}
// 得到進程占用的CPU時間
int GetCPUPercentage::GetTime(__int64& proc)
{
? FILETIME create;
? FILETIME exit;
? FILETIME ker;? // 內核占用時間
? FILETIME user; // 用戶占用時間
? FILETIME now;
? if( !GetProcessTimes(hd, &create, &exit, &ker, &user) ){
???? return(-1);
? }
? proc = (FileTimeToInt64(ker) + FileTimeToInt64(user))/10000;
? return(0);
}
// 進行換算
int GetCPUPercentage::Get()
{
? if( hd==NULL )
???? return(0);
? EnterCriticalSection(&cs);
??? DWORD t2 = GetTickCount();
??? DWORD dt = t2 - t1;
??? if( dt>139 ){? // 毫秒數。用一個比較少的時間片作為計算單位,這個值可修改
?????? __int64 proc;
?????? GetTime(proc);
?????? percent = ((proc-oldp)*100)/dt;
?????? t1 = t2;
?????? oldp = proc;
??? }
? LeaveCriticalSection(&cs);
? return(percent);
}
// 定義一個全局變量
GetCPUPercentage _cpu;
// 下面是用C++Bulider寫的測試例子:
// --------------------------
// 在用一個時鐘不停地顯示當前的CPU占用率
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{http://www.it168.com/
? Label1->Caption = _cpu.Get();
}
//---------------------------------------------------------------------------
// 再弄個按鈕
LRESULT WINAPI TestThread(LONG lParam)
{
? int n = lParam;
? for(int i=0 ;i<n; i++){
???? Form1->Label2->Caption = i;
???? Sleep(12);
? }
? return(0);
}
// 點擊這個按鈕會創建一些線程來把CPU整的繁忙些
void __fastcall TForm1::Button1Click(TObject *Sender)
{
? int n = atoi(Edit1->Text.c_str());
? DWORD dwThreadid;
? CreateThread(NULL
轉載于:https://www.cnblogs.com/shhxpump/p/3745220.html
總結
以上是生活随笔為你收集整理的如何通过一个编程获得IP地址归属地的最简单办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符编码与转码
- 下一篇: ArcGIS网络分析之Silverlig