Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C/C++/Windows] Client crasha in run time. Compilazione OK.

    Salve, ho scritto un piccolo client ma non funziona.
    In run-time crasha improvvisamente.
    Ho compilato con Code::Blocks + MinGW...
    Sapreste darmi una mano?
    Sono abb. disperato! :berto:

    CommManager.c
    ---------------
    codice:
    #include "CommManager.h"
    
    /* ////////////////////////////////////////////////////////////////////////// */
    
    const char *SITE_ADDRESS = "www.site.com";
    const char *SITE_PORT    = "80";
    const char *SITE_FILE    = "/index.php";
    
    /* ////////////////////////////////////////////////////////////////////////// */
    
    BOOL commToWebSite(void) {
        WSADATA wsaData;
        SOCKET ConnectSocket = INVALID_SOCKET;
        struct addrinfo *result = NULL,
                        *ptr = NULL,
                        hints;
        char *sendbuf = strcat(strcat("GET ", SITE_FILE), " \r\n");
        int iResult;
        /* -------------------- */
        iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
        if (iResult != 0)
            return FALSE;
        /* -------------------- */
        ZeroMemory( &hints, sizeof(hints) );
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_protocol = IPPROTO_TCP;
        /* -------------------- */
        iResult = getaddrinfo(SITE_ADDRESS, SITE_PORT, &hints, &result);
        if (iResult != 0) {
            WSACleanup();
            return FALSE;
        }
        /* -------------------- */
        for(ptr=result; ptr!=NULL; ptr=ptr->ai_next) {
            ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
            if (ConnectSocket == INVALID_SOCKET) {
                freeaddrinfo(result);
                WSACleanup();
                return FALSE;
            }
            /* -------------------- */
            iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
            if(iResult == SOCKET_ERROR) {
                closesocket(ConnectSocket);
                ConnectSocket = INVALID_SOCKET;
                continue;
            }
            /* -------------------- */
            break;
        }
        /* -------------------- */
        freeaddrinfo(result);
        if (ConnectSocket == INVALID_SOCKET) {
            WSACleanup();
            return FALSE;
        }
        /* -------------------- */
        iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
        if (iResult == SOCKET_ERROR) {
            closesocket(ConnectSocket);
            WSACleanup();
            return FALSE;
        }
        /* -------------------- */
        closesocket(ConnectSocket);
        WSACleanup();
        /* -------------------- */
        return TRUE;
    }
    CommManager.h
    ---------------
    codice:
    #include <string.h> /* Per effettuare operazioni sulle stringhe. */
    #include <winsock2.h> /* Per usare le socket */
    #include <ws2tcpip.h> /* "                 " */
    
    /* ////////////////////////////////////////////////////////////////////////// */
    
    /*
       La funzione comunica con un sito web.
       -------------------------
       Valori di ritorno:
        - FALSE, Comunicazione fallita.
        - TRUE, Comunicazione effettuata.
       -------------------------
       Parametri:
        - void
    */
    BOOL commToWebSite(void);
    Main.c
    ------
    codice:
    #include <windows.h>
    #include "CommManager.h"
    
    /* ////////////////////////////////////////////////////////////////////////// */
    
    void errMsgBox(char *msg) {
        MessageBox(NULL, msg, "Error", MB_OK|MB_ICONERROR);
    }
    
    int WINAPI WinMain(HINSTANCE i, HINSTANCE pi, LPSTR cl, int cs) {
        if(!commToWebSite())
            errMsgBox("Comunicazione fallita!");
        return 0;
    }
    La cosa che mi fa più ridere è che ho preso spunto dal sorgente pubblicato su MSDN!?
    Inoltre ho linkato tutte le librerie necessarie, tipo la ws2_32, user32, kernel32...
    Ditemi un po' voi cosa ne pensate.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Questo

    char *sendbuf = strcat(strcat("GET ", SITE_FILE), " \r\n");

    non l'hai trovato su MSDN ...

  3. #3
    Uhm...
    Ho provato a mettere una stringa a caso e non crasha più...
    Puoi illuminarmi? Che errore c'è?
    Sai come si può risolvere?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Illuminarti ... ?

    Leggi attentamente le specifiche della funzione strcat

    http://www.cplusplus.com/reference/c...ng/strcat.html

    e applicale ... (non programmare "a caso" ...)

  5. #5
    Per "stringa a caso" intendevo una stringa tipo ""...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da mr.shutdown
    Per "stringa a caso" intendevo una stringa tipo ""...
    "" e' una "stringa a caso" ... ?

    E tu vuoi gestire le USB ... ?

    Accetta un consiglio che ti puo' tornare utile ... fai un passo indietro e studia bene il linguaggio e le librerie standard ... ma MOLTO bene ...

  7. #7
    Vuoi un consiglio?
    Fatti i ca**i tuoi...

    Io non ho mai studiato questo linguaggio.
    L'ho improvvisato perché ho trovato
    le librerie.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Originariamente inviato da mr.shutdown
    Vuoi un consiglio?
    Fatti i ca**i tuoi...
    C'è un limite al livello dei toni che si possono raggiungere in una discussione, e qui direi che è stato superato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.