Portable léger en C++ sockets wrapper
Je pensais vraiment que ce serait plus facile à trouver...
J'ai besoin d'un portable c++ sockets wrapper. J'ai l'intention de l'utiliser pour une application serveur et un client qui sera en cours d'exécution sur un appareil embarqué fonctionnant ulinux (ou quelque chose de similaire). Je voudrais utiliser Boost mais j'en ai besoin pour être léger et facile à ajouter à l'appareil embarqué projet.
Aussi, je voudrais qu'il soit un "niveau supérieur" de l'emballage... de sorte qu'il démarre un thread d'arrière-plan pour lire les données et informe sur un rappel...
Des idées?
Je pense que Boost est assez bon pour vous.
Je suis d'accord avec vous, mais il va probablement que quelqu'un à l'adresse de ses craintes de Boost.Asio n'est pas "léger."
IIRC, le filetage sur Windows et Linux n'est pas vraiment la même chose, de sorte que votre soi-disant "niveau supérieur wrapper" n'est pas vraiment une enveloppe de plus, mais se penchant vers un cadre. Je ne pense pas que vous trouverez quelque chose préfabriqué qui fait exactement ce que vous voulez, de sorte que vous pouvez écrire votre propre. C'est ce que nous avons fait au travail (seulement pour les sockets, aucun thread serveur), et il a tenu le coup fine (ne peut pas le mettre ici en raison de problèmes de licence).
Les gens ont toujours soigneusement triés sur le volet pièces de boost qui sont légers. Tels sont habituellement proposée à la bibliothèque de la prochaine norme. asio a été proposé dans TR2 autant que je sache. Notez qu'il veut threads également de façon portable.
Je suis d'accord avec vous, mais il va probablement que quelqu'un à l'adresse de ses craintes de Boost.Asio n'est pas "léger."
IIRC, le filetage sur Windows et Linux n'est pas vraiment la même chose, de sorte que votre soi-disant "niveau supérieur wrapper" n'est pas vraiment une enveloppe de plus, mais se penchant vers un cadre. Je ne pense pas que vous trouverez quelque chose préfabriqué qui fait exactement ce que vous voulez, de sorte que vous pouvez écrire votre propre. C'est ce que nous avons fait au travail (seulement pour les sockets, aucun thread serveur), et il a tenu le coup fine (ne peut pas le mettre ici en raison de problèmes de licence).
Les gens ont toujours soigneusement triés sur le volet pièces de boost qui sont légers. Tels sont habituellement proposée à la bibliothèque de la prochaine norme. asio a été proposé dans TR2 autant que je sache. Notez qu'il veut threads également de façon portable.
OriginalL'auteur rusbi | 2010-12-17
Vous devez vous connecter pour publier un commentaire.
Juste apprendre à utiliser l'API socket directement. Vous pouvez ensuite facilement enveloppez-le vous-même. Ce n'est pas que dur, et vous pouvez commencer avec Beej excellent guide. Comme Beej dit:
Dans son guide, il détaille les très petits plus que vous devez faire pour obtenir la même API de Windows et les systèmes *nix.
Une fois que vous avez appris, enveloppez-le vous-même si vous êtes si incliné. Ensuite, vous pouvez contrôler exactement comment "léger" vous le souhaitez.
C'est terrible de conseils. Le BSD sockets API est plein de surprenant pièges (par exemple, des données OOB est brisé hack depuis TCP n'a pas de soutien) et est subtilement différente entre les différentes plates-formes. De choses qui pourraient sembler à première vue la même chose sur windows et linux différente, de manière importante, ce qui déboucher dans majeure pour la sécurité des bugs ou autres problèmes lorsqu'il n'est pas explicitement pris en compte. Même sur les systèmes Unix, il y a d'important et de subtiles variations dans la manière dont l'API est mis en œuvre. Voir Unix Réseau de Programmation par Stevens pour une très approfondi de ces questions.
Il semble que je dois écrire mon propre objet/wrapper, donc je vais marquer ce que la meilleure réponse...
+1 pour Beejs guide, c'est vraiment un must
J'ai développé un wrapper en C pour moi que j'utilise dans plusieurs projets depuis des années. Et c'est vraiment un de très sombre à le faire dans la comparaison .NET, par exemple. C'est vrai qu'il y a de très nombreux pièges, des incompatibilités et ainsi de suite.
OriginalL'auteur Doug T.
Je vous suggère de Coup de pouce.Asio. Malgré son nom, vous n'êtes pas obligé d'utiliser asynchronous I/o, Vous pouvez utiliser e/S synchrones et fils, comme votre question implique.
Le problème est qu'il utilise une inhabituelle paradigme de programmation qui n'est tout simplement pas bien connue. Au premier abord asio peut sembler complexe, mais si vous lisez son tutoriel et l'introduction, vous trouverez que c'est en fait assez simple et puissant.
avez-vous allé à travers les exemples? La blocage de l'écho le client et le serveur sont à peu près aussi simple que cela. @Davis Roi je suis d'accord la proactor modèle appliqué par les opérations asynchrones n'est pas trop commun, mais la bibliothèque n'a pas la force de ce modèle sur ses utilisateurs. Il est possible de l'utiliser dans un mode synchrone.
Vous envisagez de Boost léger?
OriginalL'auteur Sam Miller
Si vous n'avez pas vraiment comme Boost asio, alors vous aimerez la prise en charge des sockets en dlib. Il est plus simple dans le sens où il utilise traditionnelle de blocage IO et les threads plutôt que asio asynchrone de proactor modèle. Par exemple, il est facile de faire une tige de serveur TCP qui lit et écrit de la iostreams. Voir ce exemple par exemple. Ou vous pouvez simplement faire un simple iosockstream s'il n'agit pas en tant que serveur.
OriginalL'auteur Davis King
Je sais que c'est vieux, mais il est très agréable et simple de mise en œuvre ci-dessous l'emplacement que j'ai choisi pour un usage personnel. Avait mis en place mon propre wrapper un temps, mais a perdu le code et trouvé celui-ci en ligne qui est beaucoup mieux que le mien:
http://cs.ecs.baylor.edu/~donahoo/pratique/CSockets/pratique/
OriginalL'auteur djaa2807
Prendre un coup d'oeil à ENet http://enet.bespin.org/ il est très léger et portable et fonctionne sur le dessus de UDP, avec en option une prise en charge fiable des paquets. Il est facile à utiliser, l'API de bas niveau et avec peu de performances de surcharge. Vous avez un haut degré de contrôle sur la gestion de la mémoire, ce qui pourrait être bon si le réseau est un goulot d'étranglement pour vous et le malloc/nouvelle application que vous utilisez effectue mal sous le multithreading.
Il ne serait pas difficile à mettre en œuvre votre haut niveau thread “optimale”, car il y a un support optionnel pour le blocage de recevoir et la bibliothèque est une “bibliothèque” et non pas un cadre, par conséquent, vous êtes l'auteur de la décision à la place de la bibliothèque.
OriginalL'auteur Magnus Andermo
Peut-être vous pouvez avoir un coup d'oeil à http://www.pt-framework.org/
OriginalL'auteur SebastianK
Vieille question, mais pour le C++, type BSD synchrone sockets c'est au sujet comme un minimum de bagages wrapper que vous pouvez trouver
http://code.google.com/p/ting/source/browse/trunk/src/ting/net/
Il ne viennent avec des exceptions. Vous pourriez faire un peu plus léger, comme un en-tête uniquement bibliothèque de modèles, et peut-être faire une exception facultative, mais qui allait changer l'API un peu
POCO classes de réseau sont assez similaires, mais ne nécessitent plus de dépendances à partir d'autres parties de la Poco lib
OriginalL'auteur kert
Je suis personnellement à la création de mon propre AsIO wrapper pour TCP et les ports Série, et j'ai commencé par revoir le tutoriel suivant:
https://www.gamedev.net/blogs/blog/950-they-dont-teach-this-stuff-in-school/
et
https://objectcomputing.com/resources/publications/mnb/multi-platform-serial-interfacing-using-boost-a-gps-sensor-and-opendds-part-i/
J'ai trouvé le premier très utile et simple à comprendre.
OriginalL'auteur Ugo Giordano
C++CSP2
Utilisé il l'aimait. Stable et puissant,
OriginalL'auteur Boris