J'ai une classe, une classe très stupide. Objets de cette classe, je veux les envoyer via tcp en utilisant asio par boost. Ma classe fait correctement l'amitié avec boost stuff et implémente la méthode serialize ...C++ Boost objets sérialisés TCP sur le canal, la communication bidirectionnelle ne fonctionne pas
Eh bien je veux qu'un client se connecte à un serveur, lui envoie mon objet puis le serveur renvoie un autre objet de la même classe.
J'ai essayé de le faire:
Dans le serveur:
Data data;
int port = 2040;
boost::asio::io_service io_s;
tcp::acceptor data_acceptor(io_s, tcp::endpoint(tcp::v4(), port));
tcp::iostream data_stream;
Data data_recv;
data_acceptor.accept(*(data_stream.rdbuf())); /* Accepting */
boost::archive::binary_iarchive ia(data_stream);
ia >> data_recv;
boost::archive::binary_oarchive oa(data_stream); /* LINE Y */
oa << data; /* LINE X */
data_stream.close();
données est la classe sérialisable.
En client:
Data data_send;
Data data_recv;
tcp::iostream data_stream("127.0.0.1", "2040"); /* Creating TCP stream */
boost::archive::binary_oarchive oa(data_stream);
oa << data_send;
boost::archive::binary_iarchive ia(data_stream); /* LINE Q */
ia >> data_recv; /* Receive LINE W */
data_stream.close();
Eh bien, ça ne fonctionne pas. Il bloque en quelque sorte.
curios de parce que le problème est ce système bi-directionnel, Si je supprimer toute Q, W, X, Y ÇA FONCTIONNE !!! Savez-vous comment résoudre ce problème?
Où est 'data' défini dans le serveur? Je vois seulement 'data_recv' là. Je fais référence à la ligne X. – chrisaycock
Oui désolé, je me trompe de moi dans la copie ... J'ai posté la correction ... – Andry
Savez-vous si le client bloque la ligne Q ou W? Similaire pour le serveur. – chrisaycock