Red de conocimiento informático - Conocimiento informático - La forma más sencilla de obtener la dirección IP a través de un programa

La forma más sencilla de obtener la dirección IP a través de un programa

A veces es necesario mostrar la dirección IP de la otra parte y su ubicación en una aplicación de sitio web. En términos generales, existen varios métodos, como se detalla a continuación.

1. Utilizar la base de datos de direcciones IP. Consulta local

La ventaja de este método es que la velocidad de consulta es la más rápida y no depende de sitios web externos.

La desventaja es que necesita escribir cierto código de consulta de la base de datos y, si su base de datos no es muy nueva, los resultados de la consulta de algunas IP serán incorrectos.

(Si es necesario, puede dejar un mensaje aquí, Daxiami puede proporcionar la última biblioteca de direcciones IP que se puede encontrar)

2, utilice la consulta de servicio web.

Aquí está el mejor servicio web

/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D

La desventaja es que necesita escribir cierto código de consulta de servicio web. Además, los resultados de la consulta están en formato XML y requieren un análisis más detallado.

3. Llame a algunos códigos para consultar el sitio web, como //

La desventaja es que devolverá una gran cantidad de código irrelevante, lo que dificultará el análisis de lo que desea.

4. Llame al enlace del sitio web de la bomba de diafragma neumática para realizar una consulta directamente

Por ejemplo

/ip.aspx?ip=202.105.19.49

El sitio web devolverá directamente los resultados de la consulta, como "distrito de Sanshui, ciudad de Foshan, provincia de Guangdong"

No habrá interferencia de ninguna información diversa

La API de win32 no proporciona acceso directo al uso de la CPU. Función de bomba de diafragma neumática, pero la función GetProcessTimes() se proporciona para obtener el tiempo de CPU ocupado por el proceso. Al compararlo con el paso del tiempo real, puede obtener la proporción de la CPU ocupada por el proceso. un determinado proceso.

El siguiente es el código C completo.

//Obtener el uso de CPU del proceso actual

clase GetCPUPercentage

{

privado:

CRITICAL_SECTION cs; // Variable de sección crítica para sincronización multiproceso

HANDLE hd; // Identificador del proceso inactivo

DWORD t1; // Marca de tiempo

int percent; // El último uso de CPU calculado

__int64 oldp;

__int64 FileTimeToInt64(const FILETIMEamp; time);

int GetTime(__int64amp; proc ); // Obtener el tiempo de CPU ocupado por el proceso

public:

GetCPUPercentage();

~GetCPUPercentage();

int Get(); // Obtener el uso de CPU

};

GetCPUPercentage::GetCPUPercentage()

{

InitializeCriticalSection(amp ;cs); // Inicializar variables de sección crítica del hilo

percent = 0; // Tasa de ocupación inicial

DWORD pid = GetCurrentProcessId() // Obtener la identificación del proceso actual

p>

hd = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); // Obtenga el identificador del proceso a través de id

if( hd==NULL ){

return;

p>

}

//Obtener el valor en el momento inicial

GetTime(oldp);

t1 = GetTickCount() ;

}

GetCPUPercentage::~GetCPUPercentage()

{

if( hd!=NULL ){

CloseHandle(hd );

}

DeleteCriticalSection(amp; cs);

}

// Conversión de formato de hora

__int64 GetCPUPercentage::FileTimeToInt64(const FILETIMEamp; time)

{

ULARGE_INTEGER tt;

tt.LowPart = time.dwLowDateTime ;

tt.HighPart = time.dwHighDateTime;

return(tt.QuadPart);

}

// Obtener la CPU tiempo ocupado por el proceso

int GetCPUPercentage::GetTime(__int64amp; proc)

{

FILETIME crear;

FILETIME salir;

FILETIME ker; // Tiempo del kernel ocupado

FILETI

ME usuario; //Tiempo de ocupación del usuario

FILETIME ahora;

if( !GetProcessTimes(hd, create, exit, ker, user) ){

return (-1);

}

proc = (FileTimeToInt64(ker) FileTimeToInt64(user))/10000;

return(0);

}

//Convertir

int GetCPUPercentage::Get()

{

if( hd==NULL )

return(0);

EnterCriticalSection(amp;cs);

DWORD t2 = GetTickCount();

DWORD dt; = t2 - t1;

if( dtgt; 139 ){ // Número de milisegundos.

Utilice un intervalo de tiempo relativamente pequeño como unidad de cálculo, este valor se puede modificar

__int64 proc;

GetTime(proc);

percent = ((proc - oldp)*100)/dt;

t1 = t2;

oldp = proc;

}

LeaveCriticalSection(amp; cs );

return(percent);

}

//Definir una variable global

GetCPUPercentage _cpu;

// El siguiente es un ejemplo de prueba escrito en C Bulider:

// ------------------------- -

// Usando un reloj para mostrar continuamente el uso actual de la CPU

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{/

Label1-gt;Caption = _cpu.Get();

}

//---------------- - -------------------------------------------------- --------

// Obtener otro botón

LRESULT WINAPI TestThread(LONG lParam)

{

int n = lParam;

for(int i=0; ilt; n; i){

Form1-gt; Label2-gt; >Sleep(12);

}

return(0);

}

// Al hacer clic en este botón se crearán algunos hilos. para hacer que la CPU esté más ocupada

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int n = atoi(Edit1-gt ;Text.c_str ());

DWORD dwThreadid;

CreateThread(NULL