Y a-t-il une bibliothèque open source libre (en C / C ++) pour les sockets largement utilisés et prend en charge une large gamme de systèmes d'exploitation (Windows, UNIX / Linux, FreeBSD, etc.). Tout comme Pthreads. P>
Sinon, la seule solution est laissée pour écrire un wrapper de prise pour chaque système d'exploitation. Ou écrirait une enveloppe contre winsock et gnu c sys / socket.h des bibliothèques suffiraient? P>
ne serait-il pas possible que je le mettrai dans la bibliothèque de socket fournie avec GNU C. GNU C est disponible pour une large gamme de plates-formes et que mon code fonctionnera dans toutes ces plateformes? P>
10 Réponses :
envisager de regarder boost ? P >
Boost.Asio est également disponible en tant que package autonome. Think-Async.com/asio
Oui, vous serez très bien avec une enveloppe autour de Sockets Winsock et Standard Berkeley. En fait, les différences sont si petites qu'il est presque possible de le faire avec C'est-à-dire que si vous êtes prêt à travailler au niveau de la prise. Si vous êtes après quelque chose de plus abstrait, alors bien sûr, cela vous donne une bonne occasion de cacher également les différences. P>
En particulier, Winsock: P>
Ce sont les trois principaux en haut de la tête, il pourrait y avoir plus. p> #Ifdef code> directement dans le code. P>
WSASTARTUP () CODE> Avant toute autre fonction de prise LI>
ferme () a > code> li>
WSageTlasterRor ( ) code> pour obtenir la dernière erreur, pas uni
errno code>. li>
ul>
Pourquoi? Cela a été fait des dizaines de fois avant et je doute que vous ne puissiez pas trouver une interface que vous aimez.
@Chris: Pourquoi quoi? :) Pourquoi travailler au niveau du socket? Je ne sais pas, parfois cela a du sens, mais vous voudrez toujours être portable.
Je pense à écrire une classe (résumé si elle doit) cacher les différences. Je peux dériver de cette classe un outil pour les prises Winsock et Linux ou toute autre bibliothèque. C'est si je ne trouve pas une bibliothèque petite et efficace.
@unwind: Je ne peux pas commenter pour Chris, mais je demanderais: pourquoi le faire vous-même s'il y a tellement de mises en œuvre là-bas?
Pourquoi envelopper-le quand il n'y a rien à envelopper? Les appels de socket BSD fonctionnent partout.
@Chris Becke: C'était une sorte de mon point, ouais. Certaines différences mineures sur Windows (vous ne pouvez pas fermer () une prise, par exemple).
Ne serait-il pas possible que je le mettrai sur la bibliothèque de socket fournie avec GNU C. GNU C est disponible pour une large gamme de plates-formes et que mon code fonctionnera dans toutes ces plateformes.
Je crois à la fois le Apache Portable Runtime et les bibliothèques GTK + 'S GLIB ont des API de socket. Étant donné que votre question est étiquetée C code> et
C ++ code> Je soupçonne que vous voulez vraiment que c ++ - des réponses centrées, mais toutes les deux sont bonnes comme des bibliothèques PURE C. P>
Apache Portable Runtime est une bonne suggestion. Apache l'utilise également, alors je pense qu'il serait stable, évolutif et avec de bonnes performances. Glib a pleinement une prise en charge de UNIX mais la prise en charge de Windows en partiel.
ACE peut vous aider! P>
Ce didacticiel donne un aperçu de la couche d'adaptation ACE OS et de la conception et de l'utilisation de ses wrappers de socket C ++ fort> p>
Développer un logiciel de communication efficace et portable avec ACE et C ++ p>
Si vous regardez un coup d'œil à Ace, ne vous laissez pas submerger de la taille. La bibliothèque Core Ace est facile à utiliser des classes TCP et UDP. La documentation en ligne est à peu près référence. Obtenez le livre "Guide du programmeur ACE" pour apprendre à l'utiliser.
Si vous voulez un wrapper de style iostreams très léger, C ++, autour des sockets BSD, vous pouvez envisager Skstream - c'est simple et fonctionne bien. Bien sûr, l'interface Iostreams elle-même laisse beaucoup à désirer. Skstream enveloppe SELECT et la prise de très bas niveau de basse manipulation pour vous assez bien, cependant. P>
Il n'y a qu'une seule réponse correcte ici. Openssl. Parce qu'une fois que vous avez du code de socket, vous voulez aussi faire des connexions SSL. Si vous travaillez déjà dans un cadre de plate-forme croisé particulier, les liaisons OpenSSL peuvent déjà être disponibles. Je ne pense pas qu'il excuse de nombreuses excuser maintenant pour ne pas que SSL / TLS permet à votre demande de go-go. P>
Désolé, mais nous parlons de programmation de socket, pas de couche de session ou de sécurité.
Utilisez Boost :: Asio. Très bonne bibliothèque. Suivez ce lien http://www.boost.org/doc/libs/ 1_40_0 / DOC / HTML / BOOST_ASIO.HTML P>
Quelques liens pour vous:
bibliothèque de sockets C ++
bibliothèque de socket C ++ - Compp 1.3
SIMPLOSOCLES
libreaux
Bibliothèque KOMODIA TCP / IP
Bibliothèque STLPlus C ++
P>
framework
Nitro ++
P>
Une autre option que vous pouvez essayer est POCO . Poco a beaucoup plus que des sockets également, donc si vous avez besoin d'autres choses, cela peut également fournir. P>
en comparant à d'autres boîtes à outils: p>
juste mes deux cents p>
Dans la liste des plates-formes prises en charge, je ne trouve pas UNIX / Linux. D'autre part, ils ont mis davantage l'accent sur les plates-formes intégrées.
Les plates-formes prises en charge de POCO? Ils prennent en charge Unix / Linux. C'est sur la page d'accueil en bas: Linux; HP-UX; Tru64; Solaris. Tous ceux-ci sont des systèmes d'exploitation Unix ou Unix ressemblant à unix.
Notez que C et C ++ donneront des réponses assez différentes. Ce n'est pas parce qu'ils sont similaires ne signifie pas que vous devriez étiqueter des questions avec les deux. Si vous souhaitez des bibliothèques C ++, étiquetez-la C ++ - Les bibliothèques C seront plutôt maladroites par rapport à une bibliothèque native C ++.
J'écris une bibliothèque C ++, mais ce serait ok avec moi si la mise en œuvre est en C. Je peux utiliser les deux.
Ne serait-il pas possible que je le mettrai sur la bibliothèque de socket fournie avec GNU C. GNU C est disponible pour une large gamme de plates-formes et que mon code fonctionnera dans toutes ces plateformes.