Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Obtener conexiones activas

Igual q el anterior, no se si alguien ya lo ha publicado o no..."su misión...si deciden aceptarla...traducirla vuestro delphi del alma...publicarla en trucos si asi lo desean....este tema se autodestruira en 5 segundos..." no... es paja!!!
Código:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <iphlpapi.h>
#pragma hdrstop
#pragma argsused

//---------------------------------------------------------------------------
struct TCPROW
{ DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
};
struct TCPTABLE
{ DWORD  dwNumEntries;
  TCPROW table[100];
};
//---------------------------------------------------------------------------
AnsiString State(int status)
{ AnsiString sstate="";
  switch(status)
    { case MIB_TCP_STATE_CLOSED:     sstate = "CLOSED";     break;
      case MIB_TCP_STATE_LISTEN:     sstate = "LISTEN";     break;
      case MIB_TCP_STATE_SYN_SENT:   sstate = "SYN_SENT";   break;
      case MIB_TCP_STATE_SYN_RCVD:   sstate = "SYN_RCVD";   break;
      case MIB_TCP_STATE_ESTAB:      sstate = "ESTAB";      break;
      case MIB_TCP_STATE_FIN_WAIT1:  sstate = "FIN_WAIT1";  break;
      case MIB_TCP_STATE_FIN_WAIT2:  sstate = "FIN_WAIT2";  break;
      case MIB_TCP_STATE_CLOSE_WAIT: sstate = "CLOSE_WAIT"; break;
      case MIB_TCP_STATE_CLOSING:    sstate = "CLOSING";    break;
      case MIB_TCP_STATE_LAST_ACK:   sstate = "LAST_ACK";   break;
      case MIB_TCP_STATE_TIME_WAIT:  sstate = "TIME_WAIT";  break;
      case MIB_TCP_STATE_DELETE_TCB: sstate = "DELETE_TCB"; break;
    }
  return sstate;
}
void Error(HANDLE Handle, int Error=0)
{
  LPVOID lpMsgBuf;
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL);
  MessageBox( NULL, (char *)lpMsgBuf,"GetLastError", MB_OK|MB_ICONINFORMATION);
  LocalFree( lpMsgBuf );
  if( Handle)
    FreeLibrary(Handle);
//  exit(0);
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{ DWORD (*GTT)(TCPTABLE *,PDWORD,BOOL);
  TCPTABLE TT;
  HANDLE Handle=LoadLibrary("Iphlpapi.dll");
  if(!Handle)
    Error(0);
  GTT=(DWORD (*)(TCPTABLE *,PDWORD,BOOL))GetProcAddress(Handle,"GetTcpTable");
  if(!GTT)
    Error(Handle);
  DWORD Size = 100*sizeof(TCPTABLE)+4;
  DWORD j,dwRetVal;
  printf("Status     LocalAddrss:LocalPort  RemoteAddrss:RemotePort\n");
  dwRetVal = GTT(&TT, &Size, true);
  j=TT.dwNumEntries;   //Capturamos el total
  if( dwRetVal == NO_ERROR)
    for(int i = 0; i < j; i++)
      { printf("%10s   ",State(TT.table[i].dwState).c_str());
        unsigned short Puerto;
        char  LA[5]={0};
        memcpy(&LA,&TT.table[i].dwLocalAddr,4);
        Puerto=ntohs((unsigned short)TT.table[i].dwLocalPort);
        printf("%d.%d.%d.%d:%d   ",(int)LA[0],(int)LA[1],(int)LA[2],(int)LA[3],Puerto);
        memcpy(&LA,&(TT.table[i].dwRemoteAddr),4);
        Puerto=ntohs((unsigned short)TT.table[i].dwRemotePort);
        printf("%d.%d.%d.%d:%d \n",(int)LA[0],(int)LA[1],(int)LA[2],(int)LA[3],Puerto);
     }
  Error(0);
  return 0;
}
-El segundo parametro de la funcion Error no lo use al fin y al cabo.
-Redefini las estructuras y cargo la funcion de la DLL y no uso la definida en la libreria iphlpapi.h xq al igual q GetExtendedTcpTable....1 de cada 20 veces funciona...el resto se tira el error 87 (parametro incorrecto).
-La estructura TCPTABLE es una redefinicion donde la original tenia una sola posicion, al intentar leer esa data (como cantidad de entradas o la primera fila) se corrompia por completo la primera incluso la cantidad, el resto se mantenia extraño verdad? hice los mil y un artilugios pero nada!!!, me toco expandir ese vector pa saber si funcionaba o no la cosa. si alguien encuentra el detallito y puede arreglarlo...q lo arregle.....tengo otras vainas encima q hacer .
-Ni se les ocurra pensar q el error es por intentar almacenar mas posiciones q las disponibles, ya todo fué probado correctamente y por fallas sin explicación alguna...vino la redificion
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).

Última edición por OSKR fecha: 14-07-2006 a las 20:36:35.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
conexiones activas jlcasih Firebird e Interbase 1 27-12-2005 15:27:36
Numero de Conexiones Activas rchavezh Firebird e Interbase 3 14-09-2005 19:42:38
Enviar un mensaje a todas las conexiones activas •–[XII]–• Internet 28 01-08-2004 23:46:10
Obtener el número de conexiones a una BD repo Firebird e Interbase 2 31-05-2004 18:46:00
Dos ventanas activas roman OOP 5 01-07-2003 16:24:42


La franja horaria es GMT +2. Ahora son las 14:48:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi