gpt4 book ai didi

c - 通过已建立的 TCP 连接下载时检测 CRL 文件的结尾

转载 作者:可可西里 更新时间:2023-11-01 02:51:34 25 4
gpt4 key购买 nike

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

recv() 和写入文件的部分在一个 while 循环中,这样我就可以得到它。

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

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

最佳答案

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

但是如果对端是一个 HTTP 服务器,它应该向您发送一个 Content-length header 。请参见 RFc 2616。

关于c - 通过已建立的 TCP 连接下载时检测 CRL 文件的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com