【问题标题】:Portable Socket programming in C/C++ possible?C/C++ 中的可移植 Socket 编程可能吗?
【发布时间】:2012-03-21 23:27:35
【问题描述】:

我正在考虑创建一个多平台可移植 C++ 服务器-客户端应用程序。仅使用标准库是否有可能?如果没有,还有哪些其他库?

C++11x 在这个方向有什么改进吗?就像线程一样,现在我们有了 std::threads。

为了更清楚.. 我想要类似 boost::thread 的东西,它提供多平台可移植多线程,用于网络。

为什么 C++ 没有用于网络等基本事物的库(标准)?

更新:与 Python 相比,它(几乎)内置了所有东西......为什么不在 C++ 中?

【问题讨论】:

  • 不要试图将 Python 标准库与 C++ 标准库进行比较。那只会惹恼蛇,让你失望。
  • 考虑Boost ASIOPOCO 和(可能)ACE。我相信 ASIO 已经被提议用于 C++ TR2,所以它最终很可能最终会出现在标准库中,只是还没有。
  • @GregHewgill- Lol.. 无意冒犯,没有战争的意图,但我相信 C/C++ 是最强大的(不是功能丰富的)语言。你怎么看?
  • 我不认为你可以在单一的“更强大/更不强大”的维度上衡量语言。每种语言都有其不同的目的,有时一种语言比另一种更合适。您必须首先考虑诸如编写代码需要多长时间等方面。
  • 哦,先生。问题。网络与“基本”事物相去甚远。

标签: c++ networking boost


【解决方案1】:

Boost Asio。它“只”存在了几年......很久以前我们有ACE,但现在感觉已经过时了。

【讨论】:

  • 顾名思义,我一直认为 Boost Asio 是用于异步 I/O 的。
  • Socket 编程通常,也许是最好的,使用异步组件来完成。两者相辅相成(尽管 Boost Asio 也可以让你在没有套接字的情况下做事)。
  • boost::asio 也可以让你进行同步套接字编程。
【解决方案2】:

C++11 中没有标准的可移植选项。

然而,可移植的 boost::asio 是最好的网络 API 之一。它基于前摄器模式,非常高效。

http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio.html

【讨论】:

  • 是为了网络吗?我一直以为是异步输入输出。
  • 是的,它主要用于网络。并且前摄器是异步模型。在我的使用中非常好。
【解决方案3】:

多年来,许多尝试为网络提供这样一个跨平台库。 Berkeley 套接字库非常接近(并且可能与您的操作系统一起提供),但仍然存在特定于平台的差异。 Qt 具有尝试在 Qt 通常支持的平台子集中跨平台的网络套接字类。您可能还可以找到很多其他人。

没有类似于std::thread 的用于 C 或 C++ 的语言标准网络库。

【讨论】:

  • 我使用 Windows .. 虽然我喜欢 Linux :D
  • Windows 自带的 Winsock 库 Berkeley socket 库。你只需要调用一个Windows特有的函数(WSAStartup())就可以正常使用了。
  • 那么我可以用它写一个可移植的应用程序,可以在不同的平台上直接编译而不做任何更改?
  • 当然,您只需要一些#ifdef 条件来表示特定于平台的位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多