【发布时间】:2015-08-05 15:07:07
【问题描述】:
我正在用 C 和 C++ 构建一个简单的下载和文件传输管理器,支持暂停和恢复操作。 我寻找一种从给定 URL 逐字节下载的方法,但我能找到的只是对 libcurl 等外部库的引用。我不想要外部库,我想手动读取和写入字节,其方式与仅使用 C/C++ 本机库读取和写入字节到文件(如 C++ 中的 ifstream 和 C 中的 fopen)类似。 我需要的伪代码是:
void download(file, url) {
file.open();
url.open();
set_active(true);
while( ! pause() ) {
bytes_read = url.read(byte_array);
if(bytes_read < 1)
break;
file.write(byte_array, bytes_read);
}
url.close();
file.close();
set_active(false);
}
该伪代码在 C 和 C++ 中如何工作?
编辑:我不想为了学习这两种语言及其本机库的功能和限制的简单兴趣而使用外部库。
编辑 2:结论:这两种语言都没有对 HTTP 操作的本机支持,因此我必须在使用第三方库或从头开始编写 HTTP(和其他几种协议)实现之间做出选择,这是不可靠的。谢谢。
【问题讨论】:
-
C 或 C++ 标准库中没有网络支持。您无法避免使用 some 第三方库。这些都不缺。
-
您可以创建一个套接字,调用
connect(),然后从套接字调用read(),但这并不简单,例如,使用像curl这样的库会让您的生活变得更轻松假设您必须使用ssl进行https连接,那么编写健壮的功能完整代码将非常困难,而libcurl将帮助您做到这一点等等。此外,使用curl,您无需处理端口号以及返回多少 Ip 的getaddrinfo()以及哪个有效,对于https,您只需提供url和curl就会知道端口为你做任何事情。 -
@IgorTandetnik 我认为套接字 api 是“标准的”,因为它存在于所有主要平台上。为此,他不需要一些第三方库。他需要他的平台提供的东西。如果他想使用套接字通过 http 加载,他可能希望在原始套接字层之上找到 api。大多数操作系统也有“特定于操作系统”的标准 API。
-
您能否编辑您的问题以解释您为什么不想要第三方 HTTP 库?