与C++联网

Top*_*der 27 c++ networking resources

我是使用C++的新手,但对其语法和可用性有了一般概念.我想通过C++编程学习如何通过网络进行通信,但我似乎无法专门找到任何C++教程.有没有人知道任何有关C++网络或我应该从哪开始学习的好资源?

Ste*_*end 27

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

在开始构建基于套接字的系统以获得"某种"工作的东西时,这很容易,然后花费数周时间调试仅在实际时间和负载条件下发生的极端情况.boost::asio即使它正确地保护开发人员免受原始套接字处理的复杂性,正确使用也不是一件好事.

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

  • 你的推理问题(新人 - >套接字API太高级了)是......那么......有了这种态度,你怎么能指望他学习?有时候你必须强迫自己涉猎超出舒适程度的事物."找到一个库来做所有事情"的方法,特别是在这样一个简单的主题中,有助于解决这样一个问题:首先可以实现这些库的人很少. (10认同)
  • 出于某种原因,我的团队反对使用boost.asio的想法,你知道为什么会这样吗?这似乎是一种有效的方法来处理这类事情:S (2认同)
  • @asveikau - 取点,见编辑。 (2认同)
  • @TopGunCpp,我不知道,你应该让他们了解推理.有些团体对NIH("未发明在这里")代码有内在的敌意.也许他们希望通过从头开始构建内部网络/套接字专业知识. (2认同)

use*_*312 10

您应该查看以下指南:

Boost.Asio的看看这里的有关Boost.Asio的文件上的一个问题


fsc*_*itt 6

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


asv*_*kau 6

我敢肯定,一群鄙视C做事的C++人会讨厌我,但经典的方法是使用Berkeley套接字API(所谓的因为它们起源于BSD).如果您的目标是Windows,那么"基于源代码兼容,受Unix启发"的API称为Winsock.我想说做一个网络搜索套接字教程,你可能会得到一些有用的信息.有点小心,也许一#ifdef两个,使用这两个接口之间的共同点创建适用于Linux,BSD,Mac(提供BSD套接字)和Windows(使用Winsock)的代码并不困难.

对于更多C++倾向,更少C风格的人,或那些不喜欢对OS API进行编码的人,我确信有些C++库可以为这些相同的概念提供包装和抽象.由于Boost似乎很受欢迎,我会说看看他们有什么.