Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ShinyDavid

#1
Buenas tardes.

Hoy tengo un problema, ya que estoy haciendo un servidor y varios clientes en c++ (Conexiones por sockets), los monto en una lan y los clientes los compilo con la ip donde estaría el servidor, el problema surge por que me da la necesidad de poder mover el server de ip constantemente, entonces los clientes tendrían problemas para conectarse y requerirían ser re compilados, como podría hacer para que busquen los clientes la ip donde esta el servidor? o como podrían saber si cierta ip tiene en escucha tal puerto? puedo hacer que se intenten conectar a cada ip en el rango de lan (1-254), pero es muy tardado, necesito saber si hay una forma mas rápida?

Saludos cordiales.  ::)
#2
Buenas tardes.

Recientemente eh estado programando un proyecto, estaba buscando información de como realizar a propósito la pantalla azul de la muerte en windows, encontré que escribiendo en las claves del registro y bien programe en c++ para que se escriban solas las claves del registro, pero se realiza con una combinación de teclas las cuales son CTRL + SCROLL LOCK (Bloq/Despl), al presionarlos físicamente sale sin problemas la pantalla azul, pero ahora lo que quiero es hacer un programa que al ejecutarlo salga automáticamente la pantalla azul, pense en hacerlo con:

            keybd_event( VK_RCONTROL,0x45,KEYEVENTF_EXTENDEDKEY | 0,0 );
            keybd_event( VK_SCROLL,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0 );
            keybd_event( VK_SCROLL,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0 );
            keybd_event( VK_RCONTROL,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);


Pero aun asi no me da el pantallazo azul al ejecutar, cuando ejecuto otras teclas si las hace sin problemas (ejemplo tecla de windows, shift mas alguna letra para que salga en mayúsculas), pero en este caso no es asi, quisiera saber si me puede apoyar a realizarlo.

Gracias.
#3
Buenas noches.

Hola tengo una duda, recientemente estoy programando en C un cliente para estar a la escucha de cuando inicie el servidor se conecte automaticamente, sin embargo ya realizado el trabajo el cliente empieza a ocupar mucha ram cuando no se conecta, cada que se repite la funcion de conexion automatica se toman aproximadamente 128 kbs mas, no es mucho pero deje trabajandolo un dia completo y me tomo la mitad de la ram que tenia mi pc, lo que quiero saber es por que y como solucionarlo, este proyecto es mi primer programa en C que es un poco mas complejo ya que nunca habia usado Threads ni sockets, de antemano muchas gracias.

DWORD WINAPI CheckConexion(LPVOID LPARAM)
{
    while(1)
    {
        if(ConnectList != 1)
        {
            ConnectList = ReIntConexion();
            if(ConnectList != 1)
                Sleep(TIME_RECON);
            else
            {
                AlreadyCheckList = 0;
                ExitThread(CheckConex);
                CloseHandle(CheckCC);
                return 1;
            }
        }
    }
    return 0;
}

int ReIntConexion()
{
    printf("ejecutado");
    if(ConnectList == 1)
        return 0;

    if(AlreadyRecibeDat == 1)
        return 0;

    shutdown(sock, SD_BOTH);
    closesocket(sock);
    WSACleanup();

    WSAStartup(MAKEWORD (2, 2), &wsa);
    if((host = gethostbyname(HostOrIPCo)) == NULL)
    {
        if(AlreadyCheckList==0)
        {
            ExitThread(CheckConex);
            CloseHandle(CheckCC);
            CheckCC=CreateThread(NULL,0,CheckConexion,NULL,0,& CheckConex);
            AlreadyCheckList = 1;
        }
        closesocket(sock);
        WSACleanup();
        return -1;
    }

    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(sock == -1)
    {
        if(AlreadyCheckList==0)
        {
            ExitThread(CheckConex);
            CloseHandle(CheckCC);
            CheckCC=CreateThread(NULL,0,CheckConexion,NULL,0,&CheckConex);
            AlreadyCheckList = 1;
        }
        closesocket(sock);
        WSACleanup();
        return -1;
    }

    direc.sin_family = AF_INET;
    direc.sin_port = htons(PORT_CONE);
    direc.sin_addr = *((struct in_addr *)host->h_addr);
    memset(direc.sin_zero, 0, 8);
    conex = connect(sock,(struct sockaddr *)&direc, sizeof(struct sockaddr));

    if(conex == -1)
    {
        if(AlreadyCheckList==0)
        {
            ExitThread(CheckConex);
            CloseHandle(CheckCC);
            CheckCC=CreateThread(NULL,0,CheckConexion,NULL,0,& CheckConex);
            AlreadyCheckList = 1;
        }
        shutdown (sock, SD_BOTH);
        closesocket(sock);
        WSACleanup();
        return -1;
    }

    ReceData=CreateThread(NULL,0,RecepcionDatos,NULL,0,& ReceData_);
    AlreadyRecibeDat = 1;
    return 1;
}


Gracias.