1

由于各种原因,我正在尝试使用 C 中的粗略工具下载 CRL 文件。我正在使用 good old 打开一个 tcp 连接socket(),通过发送硬编码的纯文本 http 请求send(),通过将结果读入缓冲区recv(),然后写入该缓冲区到一个文件中(我稍后将使用它来验证各种证书)。

recv()write-to-file 部分在一个 while 循环内,这样我就可以得到它。

我的问题是我有一段时间想出一种可靠的方法来确定何时完成接收文件(因此可以跳出 while 循环)。到目前为止,我想出的所有东西要么有误报,要么有误报(取回 0 字节发生得太频繁了,要么 EOF 标记不存在,要么我在寻找错误的字节)。最好是一种不会引入很多额外复杂性的技术。

真的,我有一个主机、端口和一个路径(都为char*)。在远端,有一个友好的 http 服务器(虽然不是我控制的)。如果没有大量额外的代码复杂性,我会对任何可以让我获得文件的东西感到满意。如果我可以访问命令行,我会选择 wget 之类的东西,但我在 C API 端没有找到任何直接的等价物,system()对于这种情况来说,这是一个糟糕的选择。

4

1 回答 1

1

“取回零字节”,我假设您的意思是recv()返回零,仅在对等方完成发送数据并关闭连接时才会发生。除非对等方在每个连接中向您发送多个文件,否则这是该文件结束的可靠标志。“太频繁”是无稽之谈:每个连接只能发生一次。

但如果对等方是 HTTP 服务器,它应该向您发送 Content-length 标头。请参阅 RFC 2616。

于 2015-07-30T21:38:29.423 回答