J'ai un problème concernant Boost Asio Bibliothèques. J'ai essayé avec succès de créer une prise entre un client et un serveur, cela implique la création de résolveurs afin de spécifier IP et port sur le serveur (le serveur nécessite uniquement le port) et d'autres objets, mais surtout, il est nécessaire d'utiliser écrire code> et
read_some code> comme fonction de lecture et d'écriture de / dans la prise.
J'apprécierais vraiment d'utiliser un flux, ce qui est possible à Boost Asio, mais c'est étrange ...
Dans presque tous les exemples à l'aide de flux, pour créer un serveur, il est nécessaire de fournir un port, d'accord, parlons du client ... Côté client, il est nécessaire d'utiliser le constructeur iostream pour spécifier les coordonnées pour connecter le flux, voici le code. :
stream << mymessage_to_send << std::endl;
stream >> a_string_containing_my_message;
3 Réponses :
J'ai écrit un système client / serveur en utilisant Boost.Asio < / a>. La source est disponible sur GITUB : client.cpp et server.cpp . En utilisant Boost.Sérialisation ensemble avec Boost.Asio me permet d'envoyer Datratégres arbitraires sur le fil. Je dois dire que c'est assez impressionnant! P>
Ok, allez le vérifier immédiatement ... merci
Vous êtes libre de me poser des questions sur mon implémentation, si vous le souhaitez. Bonne chance!
Eh bien, j'essaie certaines choses en regardant votre code ... Je ne suis pas aussi expérimenté que toi ... Eh bien, les questions vont arriver, je peux maintenant dire: un code incroyable !!!!!
Merci M. Lidstrom ... Je pourrais constater une connexion à l'aide de flux ... Eh bien, je suis très intéressé par la sérialisation combinée à Asio. Dans votre projet, pouvez-vous me dire où je peux trouver un processus de sérialisation? Je suppose que ce code est un autre fichier (non serveur.cpp ou client.cpp).
Super! Regardez les commandes. Par exemple, FetchCommand et SyncCommand2. Ils sont utilisés dans Server.CPP et Client.cpp.
Tout le monde ne peut pas utiliser Github. Certaines entreprises le bloquent. Et les réponses ici ne devraient pas compter sur quelqu'un de télécharger quelque chose de GitHub. Mauvaise réponse. Répondit juste à la question.
@Cashcow Ceci est i> la réponse acceptée, alors je suppose que je l'ai fait ...
Le code d'extension ASIO Boost ASIO Vous avez cité:
tcp::iostream s("localhost", "57002");
Cela devrait être la réponse sélectionnée.
Autre que le fait qu'il ne devrait y avoir aucune () après iostream autrement, vous retournez une fonction?
@Cashcow - lol! Je viens de copier de l'Op et de clarifier. Mais bonne prise!
C'est bien pour la création de l'iostream mais pas bon pour le streaming lui-même malheureusement en raison de la mauvaise nature de iostream lui-même. Par conséquent, je suggère d'utiliser un objet d'archivage qui gère deux voies entrant / sortant et bloquera jusqu'à ce que l'objet complet soit diffusé.
Résoudre les 3 problèmes ici:
Création de l'iostream autour du côté du client de socket fort>. P> Ceci est vraiment simple: p> Vous devez vérifier l'état du flux pour voir s'il est connecté avec succès. P> Création de l'iostream autour du côté du serveur de socket fort>. p> supposant que vous avez votre objet accepteur et qu'il est lié et écouté .. p> boost::archive::binary_iarchive iarch( socketStream, boost::archive::no_header );
iarch >> message;