c - 使用 winHttpApi 或套接字发送大文件是否明智?

标签 c windows api http networking

我需要使用 HTTP 协议(protocol)发送文件,但问题是我是否应该使用套接字,因为我有大文件?或者我可以使用 WinHttpApi,例如:

BOOL HttpSendRequest(
  __in  HINTERNET hRequest,
  __in  LPCTSTR lpszHeaders,
  __in  DWORD dwHeadersLength,
  __in  LPVOID lpOptional,
  __in  DWORD dwOptionalLength
);

并为我想要的文件使用 lpOptional?我应该划分文件还是该 API 处理大文件?

如果我使用 HTTP api,文件大小是否有任何限制,我应该分配数据吗?

最佳答案

HTTP uses TCP sockets对于它的连接:

HTTP communication usually takes place over TCP/IP connections. The default port is TCP 80 [19], but other ports can be used. This does not preclude HTTP from being implemented on top of any other protocol on the Internet, or on other networks. [...]

(原则上它可以使用其他东西,但这很不寻常。)

与通过套接字设计自己的协议(protocol)相比,使用 HTTP 的优势在于有大量现有的 HTTP 库(以及其他参数)。无论如何,您都必须定义自己的小协议(protocol),即使只是为了告诉远程方文件何时开始和停止。

HTTP 有几点帮助:

如果您确实选择使用 HTTP,请尝试阅读更多有关它的内容。您实际上可能会发现 Web 服务器和 Web 客户端已经实现了您所需要的功能。我不确定 lpOptional 是关于什么的,但是您应该在构建的 URL 中指定要获取的文件。 (在您的服务器上构建您自己的 URL 空间。)

关于c - 使用 winHttpApi 或套接字发送大文件是否明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864877/

相关文章:

json - 使用 REST API 的 POST 方法进行读取操作

c - 无法使用最新的 ffmpeg 库解码 mp4 文件 : av_decode_video2

python - git 无法将 python 脚本作为钩子(Hook)执行

c - 以下 C 中的信号量应用程序如何工作?

node.js - SassError : Can't find stylesheet to import in React. js 项目 linux 操作系统

c - CMake、clang、Visual studio下如何设置C11为编译标准?

php - 如何在 php 中访问私有(private)范围的命名空间数组数据?

java - 设计应用程序模型API

c++ - 为什么 printf 可以屏蔽竞争条件而 syslog 不能?

c - 使用 gcc 返回 NULL 时没有警告