Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Struct e Socket

  1. #1

    C++ Struct e Socket

    Ciao ragazzi,

    ho un problema con il c++, in particolar modo con l'invio di una struct tramite socket.
    Premesso che mi è vietatissssssssssimo usare le winsock causa esame (e sto anche programmando su Ubuntu), ho incapsulato le chiamate di sistema in un classe chiamata Socket, per cui il codice con cui invio qualcosa sulla socket è questo:

    client->Send((void*)&msg, sizeof(msg));

    soltanto che quando questo msg è uno struct così composta:
    enum CodiciRete
    {
    NEW_GAME = 1,
    NUM_DOMANDE=2,
    INVIO_DOMANDA=3,
    INVIO_RISPOSTA=4,
    INVIO_ESATTA=5,
    INVIO_OK=100
    };

    struct MessaggioRete
    {

    enum CodiciRete cod;
    string domanda;
    unsigned short num;

    };

    mi crasha tutto con un fantastico SEGMENTATION FAULT.

    invece nel caso in cui allo struct tolgo la stringa funziona tutto.
    Utilizzando invece un array di caratteri (char domanda[20] non posso fare quello che voglio, cioè scrivere una stringa di caratteri dopo l'istanziazione dell'array.

    grazie a chi mi aiuta

  2. #2
    questo probelma lo hai perche string non contiene realmente la stringa che vuoi inviare ma un puntatore ad essa all'interno dell'oggetto instanziato.
    La stringa la devi inviare ricavando il suo puntatore (per esempio tramite la chiamata a c_str()) e la sua dimensione. Quindi la struttura la devi inviare o a pezzi o copiando il tutto su una memoria allocata.
    Altrimenti devi impegnare staticamente la memoria con char [..].
    ciao
    sergio

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ovviamente e' proprio l'elemento string che da' il problema, essendo un puntatore ad un oggetto, e' assolutamente inutile inviarlo ad un altro PC pensando che questo sia valido ...

    Se vuoi usare la struttura, devi usare, appunto, un buffer (come avevi fatto) ma non ho capito quale sia il problema ad usarlo ...

  4. #4
    struct MessaggioRete
    {
    enum CodiciRete cod;
    char domanda[255];
    unsigned short num;

    };

    il problema dell'array di char[255] è che dichiarando nel .h char domanda[255]; poi nel cpp non mi fa fare

    msg.domanda="Nuovo gioco";

    perchè dice che non può mettere un const char[12] in un char[255]

    il compilatore dice: "src/Client.cpp:28: error: incompatible types in assignment of ‘const char [12]’ to ‘char [255]’

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma questo e' ovvio ... devi utilizzare una funzione apposita per copiare i caratteri nell'array ...

    strcpy(msg.domanda, "Nuovo gioco");

    ... ma questo e' normale C ...

  6. #6
    Scusa l'ignoranza...ovviamente funziona tutto

    grazie oregon

    alla prossima


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.