【发布时间】:2018-01-22 04:45:52
【问题描述】:
我认为最好解释一下情况,这样这个问题就不会显得太神秘了。我想为我希望我的一些学生从事的项目发布一些入门代码。该项目涉及抓取一些互联网网页,因此,我想为他们提供一个 URLStream 类,该类将下载输入 url 的 html 并将其作为字符串返回给他们。
问题是我似乎找不到一种特别好的方法来处理跨平台的网络(学生有 mac/windows/linux 机器)。我知道像 Boost asio 和 libCurl 这样的库,但是使用这些库的问题是我不能强制我所有的学生都下载它们。所以我的问题是双重的:
- 有什么好的方法可以为他们提供这个跨平台的网络代码吗?
- 如果图书馆是这样做的唯一方法,有没有办法将图书馆附加到启动项目,这样学生就不必下载它?我知道这可能是一个愚蠢的问题,但我似乎无法确定这是否可行。
【问题讨论】:
-
练习的目标是什么?让学生学习低级网络编程?学习 HTTP?或者是其他东西?除非目标是让学生(或你)学习低级网络编程,否则我强烈建议你使用第三方库(如 libcurl)。这将使您和您的学生更容易。您需要的维护工作将大大减少,给您的支持和问题也将大大减少。
-
@Someprogrammerdude 练习的目标与网络无关。他们最多是在搞乱html。我只是希望他们能够专注于任务,而不必担心网络问题。我非常愿意使用 3rd 方库,但这需要我告诉他们下载和设置库(对吗?)——我试图避免这种情况,因为他们不必担心这些细节。是否可以将 libcurl 附加到启动项目,这样他们就不必下载它了?
-
如果您可以访问学生可以访问的大多数系统(Windows 系统、macOS 系统和 Linux 系统),那么您始终可以预先构建一个静态库,例如libcurl 随您的启动代码一起分发,并在构建时提供有关如何使用该库的简单说明。
-
但是您可以使用低级套接字创建自己的简单 HTTP 功能,特别是如果您只想发出简单的
GET请求。这里的好消息是所有主要平台都支持Berkeley sockets,它在 Linux 和 macOS 上应该是一对一的匹配,Windows 只是略有不同。不利的一面是,如果您自己没有进行过低级网络编程,可能需要一些时间才能获得正确的结果,并且您需要编写大量样板代码。 -
@Someprogrammerdude 感谢您的详细回复。如果你想把它变成一个答案,我可以投票。我的一些请求必须转到 wikipedia 页面,而我在使用原始套接字时遇到了麻烦。我想我会加倍努力。
标签: c++ networking