Saltar al contenido

C++ ¿Cómo puedo enviar un objeto a través de un socket?

Después de de nuestra larga compilación de datos solucionamos esta problema que pueden tener algunos lectores. Te dejamos la respuesta y esperamos servirte de mucha apoyo.

Es imposible enviar objetos a través de una conexión TCP en sentido literal. Los sockets solo saben cómo transmitir y recibir un flujo de bytes. Entonces, lo que puede hacer es enviar una serie de bytes a través de la conexión TCP, formateados de tal manera que el programa receptor sepa cómo interpretarlos y crear un objeto que sea idéntico al que el programa emisor quería enviar.

Ese proceso se llama serialización (y deserialización en el lado receptor). La serialización no está integrada en el propio lenguaje C++, por lo que necesitará algún código para hacerlo. Se puede hacer a mano, usando XML, o a través de los búferes de protocolo de Google, o convirtiendo el objeto en texto legible por humanos y enviando el texto, o de muchas otras maneras.

Echa un vistazo aquí para obtener más información.

puedes hacer esto usando la serialización. Esto significa tirar del objeto en pedazos para que pueda enviar estos elementos sobre el zócalo. Luego, debe reconstruir su clase en el otro extremo de la conexión. en Qt hay una clase QDataStream disponible que proporciona dicha funcionalidad. En combinación con un QByteArray, puede crear un paquete de datos que puede enviar. La idea es simple:

Remitente:

QByteArray buffer;
QDataStream out(&buffer);
out << someData << someMoreData;

Receptor:

QByteArray buffer;
QDataStream in(&buffer);
in >> someData >> someMoreData;

Ahora es posible que desee proporcionar un constructor adicional:

class blocco

    public:
        blocco(QDataStream& in)
            // construct from QDataStream
        

        //or
        blocco(int id, char* data)
            //from data
        
        int ID;
        char* data;


        blocco(int id);
;

ejemplo extendido

Puntuaciones y reseñas

Agradecemos que quieras añadir valor a nuestro contenido aportando tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *