【问题标题】:Resources to learn Networking with C++ [closed]使用 C++ 联网 [关闭]
【发布时间】:2011-04-20 07:30:54
【问题描述】:

我是使用 C++ 的新手,但对它的语法和可用性有一个大致的了解。我想学习如何通过 C++ 编程通过网络进行通信,但我似乎找不到任何专门针对 C++ 的教程。 有没有人知道任何好的资源来学习使用 C++ 建立网络或我应该从什么开始?

【问题讨论】:

  • 我在 C++ here 中给出了关于套接字编程的广泛答案。希望能帮到你
  • 它被考虑用于 C++20,但被推迟了:en.wikipedia.org/wiki/C%2B%2B20 已经存在于 GCC 中,但在实验性/下。

标签: c++ networking resources


【解决方案1】:

鉴于您对 C++ 的陌生,我不建议直接在套接字 API 上构建,除非您找不到合适的库来使用。 Boost.Asio 将为您提供一个巨大的开端,让您了解网络编程中使用的更高级别的抽象。

在开始构建基于套接字的系统时,很容易获得“某种”有效的东西,然后花费数周时间调试仅在实际时序和负载条件下发生的极端情况。正确使用boost::asio 并不是小菜一碟,即使它使开发人员免受原始套接字处理的复杂性的影响。

如果目标是学习如何正确使用原始套接字(或其他一些传输机制,例如 RPC),那么请务必使用在线示例和文档自行学习以了解各个 BSD 或 Winsock API - 如果目标是在业务和网络基础设施方面使用高质量的代码尽快解决业务问题,然后使用好的网络库。在这种情况下,您的问题确实表明希望学习,因此使用库可能不是实现您既定目标的最佳方式。

【讨论】:

  • 出于某种原因,我的团队反对使用 boost.asio 的想法,你知道为什么会这样吗?这似乎是处理这类事情的有效方法:S
  • 你的推理问题(新人-> socket APIs太高级了)是……嗯……以这种态度,你怎么能指望他学习呢?有时你不得不强迫自己涉足超出你舒适水平的事情。 “找到一个库来做所有事情”的方法,尤其是在这样一个简单的主题中,导致了这样一个问题,即很少有人能够首先实现这些库。
  • @asveikau - 点,见编辑。
  • @TopGunCpp,我不知道,你应该问他们明白其中的道理。一些团体只是对 NIH('Not Invented Here')代码有内在的敌意。也许他们想通过从头开始构建来构建内部网络/套接字专业知识。
【解决方案2】:

您应该查看以下指南:

Boost.Asio 查找here 以获取有关与Boost.Asio 相关的文档的问题

【讨论】:

    【解决方案3】:

    我敢肯定,一群鄙视 C 做事方式的 C++ 人会因此而讨厌我,但经典的做法是使用 Berkeley socket APIs(之所以这么称呼,是因为它们起源于 BSD)。如果您的目标是 Windows,“很大程度上与源代码兼容,受 Unix 启发”的 API 称为Winsock。我会说对socket tutorial 进行网络搜索,您可能会得到一些有用的信息。稍加注意,也许是 #ifdef 或两个,使用这两个接口之间的共同点创建适用于 Linux、BSD、Mac(提供 BSD 套接字)和 Windows(带有 Winsock)的代码并不难。

    对于更倾向于 C++、更少 C 风格的人,或者那些不喜欢针对 OS API 编写代码的人,我确信有 C++ 库可以为这些相同的概念提供包装器和抽象。由于 Boost 似乎很受欢迎,我会说see what they have

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      C++ 的标准库不支持此功能,因此您必须使用系统 API 或一些抽象库,例如QT。

      【讨论】:

        【解决方案6】:

        C++ 是一种面向对象的语言并且是开放的,因此您可以借鉴其他语言,尤其是 C。但这里有几本书可能会有所帮助。 http://wjyl.nuaa.edu.cn/kfyy/article/C++%20Network%20Programming%20Volume%201.pdf 可能还有 http://www.cs.wustl.edu/~schmidt/PDF/ACE-tutorial.pdf 等等。还有其他人在那里。

        【讨论】:

          【解决方案7】:

          也许Boost.Asiothis one (Unicomm)基于它会适合你

          【讨论】:

            猜你喜欢
            • 2014-09-14
            • 1970-01-01
            • 2021-11-02
            • 1970-01-01
            • 2018-11-03
            • 1970-01-01
            • 1970-01-01
            • 2013-01-04
            • 2012-10-02
            相关资源
            最近更新 更多