Je travaillais beaucoup au niveau de la socket et si c'est ce dont vous avez besoin alors oui Boost :: Asio est génial, même si c'est un peu déroutant.
Cependant, si vous avez juste besoin de fournir des données entre processus (sur des machines identiques ou différentes), alors j'irais un peu plus haut dans la pile et regarderais quelque chose comme ØMQ; Jetez un coup d'oeil comment il est facile de recevoir un "message" d'un autre processus:
zmq::context_t ctx(1);
zmq::socket_t sock(ctx, ZMQ_REQ);
sock.connect("tcp://localhost:5555");
zmq::message_t msg;
while(sock.recv(&msg)) {
std::string s(static_cast<char*>(msg.data()), msg.size());
std::cout << s;
}
L'envoi est tout aussi simple.
zmq::context_t ctx(1);
zmq::socket_t sock(ctx, ZMQ_REP);
sock.bind("tcp://*:5555");
std::string s = "Hello you!";
zmq::message_t msg(s.size());
memcpy(msg.data(), s.data(), s.size());
while(true) {
sock.send(msg);
sleep(1);
}
ZeroMQ est très léger et prend en charge la connexion, rebranchement, transmission, cadrage, etc ... Tout ce que vous devez avoir est votre charge utile « message » que vous voulez afficher sur l'autre côté de la pipe (dans ce cas, nous avons juste utilisé des chaînes simples).
Il prend également en charge un certain nombre de techniques de messagerie plus avancées telles que pub-sub (récepteurs multiples des mêmes messages).
La plupart des programmeurs qui utilisaient le code socket simple sont morts. –
bsd/win le code de la prise est en réalité mort simple. la complexité réside dans le fait de traiter de la nature des flux, et chaque «simple» enveloppe que nous venons de voir expose à nouveau les mêmes problèmes. –
Quel genre d'application est-ce? Un outil de ligne de commande qui utilise le réseau (comme wget ou ftp)? Une application graphique qui utilise le réseau (comme un navigateur Web)? Un service d'arrière-plan qui utilise le réseau (comme Windows Update)? Un serveur réseau en arrière-plan (comme un serveur web ou un serveur ftp)? Les wrappers qui fonctionnent bien dans un environnement sont horribles pour d'autres applications. –