使用C++学习网络编程的资源

38

我是C++的新手,但已经掌握了其语法和可用性的基本概念。虽然我想学习如何通过C++编程进行网络通信,但似乎找不到任何特定于C ++的教程。

有人知道哪些好的资源可以学习使用C++进行网络编程,或者我应该从哪里开始吗?


5
我在这里为C++的socket编程问题提供了详细的答案,希望能够帮助。原文链接:https://dev59.com/NHE85IYBdhLWcg3wUBoZ#2920787。 - default
它曾被考虑加入C++20,但被推迟了:https://en.wikipedia.org/wiki/C%2B%2B20 然而,在GCC的实验性目录下已经存在。 - Ciro Santilli OurBigBook.com
7个回答

37

鉴于您对C++的新手程度,我建议您在没有找到合适的库时不要直接使用套接字API来构建系统。使用Boost.Asio将为您提供巨大的帮助,并向您展示网络编程中使用的更高级别抽象。

当您开始构建基于套接字的系统时,很容易创建出“凑合能用”的东西,然后花费数周时间调试仅在实际时间和负载条件下发生的边角情况。即使boost::asio屏蔽了开发人员处理原始套接字的复杂性,但正确使用它并不容易。

如果目标是学习如何正确使用原始套接字(或其他传输机制,如RPC),那么请使用在线示例和文档以了解各个BSD或Winsock API--如果目标是尽可能快地解决业务问题,并在企业和网络基础设施方面编写高质量代码,则请使用良好的网络库。考虑到您的问题表明您想要学习,因此使用库可能不是实现您所述目标的最佳方式。


2
由于某些原因,我的团队反对使用boost.asio,你知道为什么吗?这似乎是一种合理的处理这种情况的方式 :S - CoderDake
24
你的推理有问题(新手 -> 套接字API太高级),因为...嗯...有了那种态度,你怎么能指望他学习呢?有时候你必须强迫自己去涉足超出你舒适范围的事情。“找一个库来完成所有事情”的方法,特别是在如此简单的主题中,会导致这些库首先被很少的人实现的问题。 - asveikau
3
明白了,看到编辑了。 - Steve Townsend
3
@TopGunCpp,我不知道,你应该问他们以了解推理。有些团体对“非本地发明”代码具有内在的敌意。也许他们想通过从头开始构建此功能来建立内部网络/套接字专业知识。 - Steve Townsend

11

9

我确定许多厌恶使用C方法的C++人会因此而憎恨我,但经典方法是使用Berkeley socket APIs(因为它们起源于BSD)。如果你的目标是Windows,则被称为“在Unix上启发并且基本源代码兼容”的API被称为Winsock。我建议搜索socket tutorial,你可能会得到一些有用的信息。只需小心和一个或两个#ifdef,就可以创建适用于Linux、BSD、Mac(提供BSD sockets)和Windows(使用Winsock)的代码,利用这两个接口之间的共同点。

对于更偏向于C++,不太喜欢C-style编程或不想针对操作系统API编码的人们,我相信有一些C++库提供了这些概念的包装和抽象。由于Boost似乎很受欢迎,我建议看看他们有什么


5

C++的标准库不支持此功能,因此您需要使用系统API或某些抽象库(例如QT)。



1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接