J'ai besoin d'envoyer une structure de différents types de données à la fois via UDP. J'ai essayé d'utiliser la bibliothèque boost, mais je ne peux pas envoyer tous les éléments de structure en même temps. Voici un extrait de la structure que je dois envoyer:

    struct sample {
       char a;
       char16_t b;
       char c;
       std::string d;
       char e;
    };
    sample mystruct;

La création d'une chaîne concaténant chaque élément ne fonctionne pas pour moi car j'envoie des valeurs hexadécimales qui ne doivent pas être converties en chaîne. Voici la méthode que j'utilise pour envoyer les informations via le socket:

sock.send_to(boost::asio::buffer(&mystruct, sizeof(mystruct)), remote, 0, error);

Cela ne fonctionne pas car des données supplémentaires sont envoyées. Je veux seulement envoyer les éléments de la structure, sans séparation ni aucune sorte de données entre eux.

Merci d'avance.

1
Javier Urrestarazu 4 nov. 2019 à 14:31

1 réponse

Cela ne fonctionnera pas. Vous ne pouvez envoyer des données brutes que via une connexion car ASIO n'effectue aucune sérialisation. std::string n'est pas un type trivial et contient également des membres (comme des pointeurs) qui n'ont pas de sens à envoyer via une connexion. En outre, une structure peut ne pas être portable entre des ordinateurs de types différents.

Vous devrez utiliser quelque chose comme la bibliothèque Boost Serialization, Protobuffers ou une bibliothèque similaire; ou effectuer vous-même des tâches similaires.

0
Acorn 4 nov. 2019 à 11:41