什么是流行的,多平台,免费和开源的套接字库

时间:2009-10-19 06:41:34

标签: c++ c sockets

是否有任何免费的开源库(在C / C ++中)用于广泛使用的套接字,并支持广泛的操作系统(Windows,Unix / Linux,FreeBSD等)。就像pthreads一样。

否则剩下的唯一解决方案是为每个操作系统编写套接字包装器。或者编写一个针对winsock和GNU C sys / socket.h库的包装器就足够了吗?

我是不是可以针对GNU C提供的套接字库实现它.GNU C可用于各种平台,我的代码可以在所有这些平台上运行吗?

10 个答案:

答案 0 :(得分:13)

考虑一下boost

答案 1 :(得分:8)

QT如果它对你来说不是太大。 Boost也有一些网络代码。 wxWidgets也为wxNet提供了一个网络库。另一个lib是Clanlib。当然还有SDL

答案 2 :(得分:4)

ACE可以帮助您!

本教程概述了ACE OS适配层及其C ++套接字包装器的设计和使用

Developing Efficient and Portable Communication Software with ACE and C++

答案 3 :(得分:3)

是的,你将在Winsock和标准Berkeley套接字周围使用一个包装器。事实上,差异非常小,几乎可以直接在代码中使用#ifdef

也就是说,如果您愿意在套接字级别工作。如果你正在追求更抽象的东西,那么当然包装它会让你有机会隐藏差异。

特别是,Winsock:

  • 要求您通过在任何其他套接字功能之前调用WSAStartup()来“启动它”
  • 不允许您在套接字上使用普通的旧close();您必须使用closesocket()
  • 要求您使用WSAGetLastError()获取上一个错误,而不是errno

这些是我头顶的三大主要内容,可能会有更多。

答案 4 :(得分:3)

我相信Apache Portable Runtime和GTK +的GLib库都有套接字API。由于您的问题被标记为cc++,我怀疑您确实需要以C ++为中心的答案,但这两者都是纯粹的C库。

答案 5 :(得分:3)

使用boost :: asio。非常好的图书馆。点击此链接 http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html

答案 6 :(得分:3)

答案 7 :(得分:3)

您可以尝试的其他选项是Poco。 Poco还有很多东西,所以如果你需要其它的东西,它也可以提供。

将其与其他工具包进行比较:

  1. Qt拥有GUI和一些你在Poco中找不到的非常复杂的功能,但是它要大得多。
  2. Boost在实际功能方面没有Poco那么多,但它有像引用包装器,MPL和预处理器这样的库,在其他任何地方都找不到。
  3. 我不太清楚ACE,但我记得它在源代码和组件方面非常大。 ACE似乎用于非常高性能的网络应用程序,因此它可能有点过分。但话说回来,我不太确定。
  4. 只是我的两分钱

答案 8 :(得分:1)

如果你想要一个非常轻的,仅限C ++,iostreams式的BSD套接字包装器,你可以考虑skstream - 它很简单并且效果很好。当然,iostreams界面本身还有很多不足之处。尽管如此,skstream会很好地包装select和非常低级的socket处理。

答案 9 :(得分:-2)

这里只有一个正确答案。 OpenSSL的。因为一旦你有套接字代码,你也想要建立SSL连接。如果您已经在特定的跨平台框架中工作,那么OpenSSL绑定可能已经是可用的。 我认为现在没有太多理由不让SSL / TLS从一开始就启用你的应用程序。

相关问题