9
votes

Quelle est une bibliothèque populaire, multi-plate-forme, gratuite et open source

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.

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?

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?


3 commentaires

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.


10 Réponses :


13
votes

envisager de regarder boost ?


1 commentaires

Boost.Asio est également disponible en tant que package autonome. Think-Async.com/asio



8
votes

qt si ce n'est pas trop gros pour vous. boost a également du code de réseau. wxwidgets a également avec WxNet une bibliothèque de réseau. Une autre lib est clanlib . Et bien sûr SDL


0 commentaires

3
votes

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 #Ifdef directement dans le code.

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.

En particulier, Winsock:

  • vous demande de "le démarrer" en appelant WSASTARTUP () Avant toute autre fonction de prise
  • ne vous permet pas d'utiliser un ancien plainnel () sur une prise; Vous devez utiliser ferme ()
  • exige que vous utilisiez WSageTlasterRor ( ) pour obtenir la dernière erreur, pas uni errno .

    Ce sont les trois principaux en haut de la tête, il pourrait y avoir plus.


7 commentaires

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.



4
votes

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 et C ++ 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.


1 commentaires

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.



4
votes

ACE peut vous aider!

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 ++

Développer un logiciel de communication efficace et portable avec ACE et C ++


1 commentaires

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.



1
votes

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.


0 commentaires

-2
votes

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.


1 commentaires

Désolé, mais nous parlons de programmation de socket, pas de couche de session ou de sécurité.



3
votes

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


0 commentaires


3
votes

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.

en comparant à d'autres boîtes à outils:

  1. QT a une interface graphique et des fonctionnalités très sophistiquées que vous ne trouverez pas dans POCO, mais c'est beaucoup plus grand.
  2. Boost n'a pas autant que POCO dans la manière de la fonctionnalité réelle, mais il a des bibliothèques telles que des emballages de référence, MPL et le préprocesseur qui ne peuvent être trouvés nulle part ailleurs.
  3. Je ne me souviens pas très bien de l'Ace, mais je me souviens qu'il était très très important en termes de code source et de composants. L'ACE semble être utilisé pour des applications de réseau de très hautes performances, il peut donc être surchargé. Mais là encore, je ne suis pas trop sûr.

    juste mes deux cents


2 commentaires

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.