我是C++的新手,但已经掌握了其语法和可用性的基本概念。虽然我想学习如何通过C++编程进行网络通信,但似乎找不到任何特定于C ++的教程。
有人知道哪些好的资源可以学习使用C++进行网络编程,或者我应该从哪里开始吗?
我是C++的新手,但已经掌握了其语法和可用性的基本概念。虽然我想学习如何通过C++编程进行网络通信,但似乎找不到任何特定于C ++的教程。
有人知道哪些好的资源可以学习使用C++进行网络编程,或者我应该从哪里开始吗?
鉴于您对C++的新手程度,我建议您在没有找到合适的库时不要直接使用套接字API来构建系统。使用Boost.Asio将为您提供巨大的帮助,并向您展示网络编程中使用的更高级别抽象。
当您开始构建基于套接字的系统时,很容易创建出“凑合能用”的东西,然后花费数周时间调试仅在实际时间和负载条件下发生的边角情况。即使boost::asio
屏蔽了开发人员处理原始套接字的复杂性,但正确使用它并不容易。
如果目标是学习如何正确使用原始套接字(或其他传输机制,如RPC),那么请使用在线示例和文档以了解各个BSD或Winsock API--如果目标是尽可能快地解决业务问题,并在企业和网络基础设施方面编写高质量代码,则请使用良好的网络库。考虑到您的问题表明您想要学习,因此使用库可能不是实现您所述目标的最佳方式。
我确定许多厌恶使用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似乎很受欢迎,我建议看看他们有什么。
C++的标准库不支持此功能,因此您需要使用系统API或某些抽象库(例如QT)。
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等。当然还有其他可供选择的书籍。