我需要使用HTTP协议发送文件,但问题是我应该使用套接字,因为我有大文件?或者我可以使用WinHttpApi,例如:
BOOL HttpSendRequest(
__in HINTERNET hRequest,
__in LPCTSTR lpszHeaders,
__in DWORD dwHeadersLength,
__in LPVOID lpOptional,
__in DWORD dwOptionalLength
);
并将lpOptional用于我想要的文件?我应该分配文件还是这个API处理大文件?
如果我使用HTTP apis,文件大小是否有任何限制,我应该分配数据吗?
答案 0 :(得分:2)
HTTP uses TCP sockets用于连接:
HTTP通信通常通过TCP / IP连接进行。该 默认端口是TCP 80 [19],但可以使用其他端口。这样做 不排除在任何其他协议之上实现HTTP 在互联网上或其他网络上。 [...]
(它原则上可以使用别的东西,但这很不寻常。)
使用HTTP而不是在套接字上设计自己的协议的优点是有大量现有的HTTP库(以及其他参数)。无论如何,你必须定义自己的小协议,如果只是在文件启动和停止时告诉远程方。
HTTP帮助的几点:
Content-Length
header或chunked transfer encoding时,它可以告诉您阅读完文件的时间。这是必要的,因为您can't generally distinguish clean and abrupt connection closures in TCP(具有isConnected
功能的API是不够的。)如果您确实选择使用HTTP,请尝试阅读更多相关内容。您实际上可能会发现Web服务器和Web客户端已经实现了您所需的功能。我不确定lpOptional
是什么,但您应该在您构建的URL中指定要获取的文件。 (在服务器上构建自己的URL空间。)
答案 1 :(得分:1)
HTTP只是套接字之上的更高层协议。因此,套接字的任何问题都将面临HTTP。
您正在考虑的文件有多大?几乎所有限制都不是由于您选择的API,而是带宽等限制因素。