PDA

View Full Version : [c++] linux -> socket -> scambio di oggetti


Ricky
06-03-2009, 13:27
Ciao ragazzi,
qualcuno di voi conosce qualche sistema per inviare oggetti c++ via socket?
Io ho a disposizione una classe socket che mi consente di inviare stringhe e quindi si preoccupa di tutta la gestione del loro invio.
La mia idea è quindi quella di convertire in stringa il mio oggetto....è la strada giusta o si può fare di meglio?

wizard1993
06-03-2009, 15:09
cobra; rmi... ce ne sono tante di tecnologie che potrebbero fare al caso tuo; ma queste sono le più "diffuse"

fero86
06-03-2009, 22:32
"corba", non "cobra" :)
ho voluto precisare perché altrimenti Ricky cercando sul web non avrebbe trovato niente.

aggiungo anche che RMI é una tecnologia Java (non puó essere usata in C++), peró lo consiglio rispetto a CORBA perché secondo me é piu facile da usare.

wizard1993
07-03-2009, 13:27
"corba", non "cobra" :)

errore mio di battitura; grazie di averlo fatto notare

vizzz
07-03-2009, 14:06
alla fine l'invio su socket è una semplice write di dati binari, quindi puoi scrivere sul socket il tuo oggetto indicando il puntatore all'oggetto e la sua dimensione (sizeof)

fero86
07-03-2009, 14:47
alla fine l'invio su socket è una semplice write di dati binari, quindi puoi scrivere sul socket il tuo oggetto indicando il puntatore all'oggetto e la sua dimensione (sizeof) pessima soluzione se l'oggetto contiene puntatori o riferimenti ad altri oggetti, o se contiene oggetti "opachi" (per esempio oggetti STL, come std::string) la cui implementazione non é nota e potrebbe contenere puntatori o riferimenti ad altri oggetti ancora. inoltre il concetto si estende al caso di puntatori/riferimenti a dati generici piuttosto che oggetti; in altre parole questa soluzione non va bene neanche se l'oggetto da inviare contiene una stringa sotto forma di puntatore a char (per esempio).

inutile reinventare la ruota: vai di CORBA e vivi felice (ma possibilmente usa Java e RMI che sono molto piu facili).

inoltre i socket sono piu difficili da usare perché l'interfaccia BSD é troppo di basso livello, permette di gestire troppi aspetti di cui nel 99% dei casi non interessa nulla; per esempio, per fare una banale send é necessario un loop con un algoritmo molto error-prone perché una sola chiamata potrebbe aver inviato meno dati di quanti sono presenti nel buffer. i socket Java sono giá molto piu facili da usare ma a quel punto c'é RMI.

Ricky
08-03-2009, 00:12
grazie per gli interventi siete stati tutti molto gentili come al solito.
Conosco Corba ma volevo evitare di utilizzare questa soluzione.
Pensavo che esistesse un modo per serializzare il mio oggetto in maniera più o meno automatica e quindi passarlo via socket e deserializzarlo(si può dire?!?:D) dall'altra parte della socket.
Ammesso infatti che io abbia un sistema, funzione, metodo che mi garantisce in maniera abbastanza "safe" l'invio di stringhe via socket, pensavo di parsare la mia classe in un formato tipo xml->stringa e di ricrearmi la classe dall'altra parte...
come vi sembra come soluzione?

cionci
08-03-2009, 13:50
Imho potresti serializzare in XML tramite boost: http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/index.html
http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/tutorial.html

Ricky
09-03-2009, 23:29
grande cionci:)
appena risolvo il problema posto la mia soluzione. Per ora però posticipo un pò la cosa visto che non è proprio così banale!