C++ 什么是流行的、多平台的、免费的、开源的套接字库

C++ 什么是流行的、多平台的、免费的、开源的套接字库,c++,c,sockets,C++,C,Sockets,在C/C++中是否有任何免费的开放源代码库,用于广泛使用的套接字,并支持Windows、Unix/Linux、FreeBSD等操作系统,就像pthreads一样 否则,剩下的唯一解决方案就是为每个操作系统编写套接字包装器。或者针对winsock和GNU C sys/socket.h库编写包装器就足够了 难道我不可能在GNU C提供的套接字库上实现它吗?GNU C可用于各种平台,我的代码可以在所有这些平台上运行?如果它对您来说不是太大,请考虑查看它。也有一些网络代码。wxNet也有一个网络库。另一

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

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


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

如果它对您来说不是太大,请考虑查看它。也有一些网络代码。wxNet也有一个网络库。另一个lib是。当然

是的,用Winsock和标准Berkeley套接字的包装器可以走得更远。事实上,差异非常小,几乎可以直接在代码中使用ifdef来实现

也就是说,如果您愿意在套接字级别工作。如果你想要的是更抽象的东西,那么包装它当然会给你一个很好的机会来隐藏差异

尤其是Winsock:

要求您在调用任何其他套接字函数之前先启动它 不允许您在插座上使用普通的闭合式插座;你必须使用 要求您使用获取最后一个错误,而不是普通的errno。 这些是我不知道的三个主要问题,可能还有更多。

我相信和GTK+的GLib库都有socket API。因为你的问题是C和C++的标记,我怀疑你真的想要C++为中心的答案,但是这两个都是纯C库的好。

ACE可以帮助你!

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


如果您想要一个非常轻的、C++的、围绕BSD套接字的IOSWATESTS风格包装器,您可以考虑它简单而且工作正常。当然,iostreams接口本身还有很多需要改进的地方。不过,skstream确实很好地为您包装了select和非常低级的套接字。

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

使用boost::asio。非常好的图书馆。点击这个链接

为您提供一些链接:

框架

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

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

Qt有GUI和一些在Poco中找不到的非常复杂的功能,但它要大得多。 Boost在实际功能上没有Poco那么多,但是它有参考包装器、MPL和预处理器之类的库,这在其他任何地方都找不到。 我不太记得ACE,但我记得它在源代码和组件方面非常重要。ACE似乎用于非常高性能的网络应用程序,因此可能有点过头了。但话说回来,我不太确定。
<我的两分钱

注意到C和C++将给出完全不同的答案。仅仅因为它们是相似的并不意味着你应该把这两个问题都加上标签。如果你想要C++库,标记它C++,C库与C++ C++库相比会相当笨拙。但是如果实现是用C语言,我也可以。我可以同时使用这两种语言。我是不是可以用GNU C提供的套接字库来实现它。GNU C可以用于多种平台,我的代码可以在所有这些平台上运行。为什么?以前已经做过几十次了,我怀疑你找不到你喜欢的界面。@Chris:为什么为什么要在套接字级别工作?我不知道,有时候它是有意义的,但是你可能仍然希望是可移植的。如果必须的话,我正在考虑写一个类抽象,它将隐藏差异。我可以从这个类派生一个用于winsock和Linux套接字或任何其他库的实现。这就是如果我找不到一个小而高效的库。@unwind:我不能为Chris发表评论,但我想问:如果有这么多的实现,为什么要自己做呢?为什么在没有什么可包装的时候包装它?BSD套接字调用在任何地方都可以工作。Apache Portable Runtime是一个很好的建议。Apache也使用它,所以我认为它将是稳定的、可扩展的并且具有良好的性能。GLib完全支持UNIX,但部分支持windows。很抱歉,我们讨论的是套接字编程,而不是会话层或安全性。如果您查看ACE,请不要被它的大小所淹没。核心ACE库具有易于使用的TCP和UDP类。在线文档非常有参考价值。获取有关lea的ACE程序员指南
rn how to use it.boost.asio也作为独立软件包提供。从支持的平台列表中,我找不到UNIX/Linux。另一方面,他们更加重视嵌入式平台。Poco支持的平台?他们确实支持Unix/Linux。它位于主页底部:Linux;HP-UX;Tru64;Solaris。所有这些都是Unix或类似Unix的操作系统。