如何通过 HTTP 通过 C 中的 tcp 套接字发送文件?

gle*_*096 2 c sockets tcp http

我正在用 C 语言(在 Linux 上)实现一个客户端和服务器,我想使用 HTTP PUT 消息从客户端向服务器发送一个文本文件。

我真的不知道如何做到这一点。我是否首先通过套接字发送 HTTP 请求和标头行,然后使用缓冲区通过套接字逐个发送文件?或者我是否需要在发送文本文件的每个部分之前为其添加自己的 HTTP 请求和标题行?

我还读到了这个名为 sendfile 的函数,它似乎会让这更容易,但我不确定如果 sendfile 只是将文件直接发送到套接字,我将如何将 HTTP 标头和请求行添加到文件中。

感谢您的帮助。

n. *_* m. 5

我是否首先通过套接字发送 HTTP 请求和标头行,然后使用缓冲区通过套接字逐个发送文件?

是的。

或者我是否需要在发送文本文件的每个部分之前为其添加自己的 HTTP 请求和标题行?

不。

我还读到了这个名为 sendfile 的函数,它似乎会让这更容易,但我不确定如果 sendfile 只是将文件直接发送到套接字,我将如何将 HTTP 标头和请求行添加到文件中。

首先发送带有正常的标头send,然后调用sendfile. 但是,您应该阅读文档,其中说

请注意,成功调用 sendfile() 可能会写入比请求更少的字节;如果有未发送的字节,调用者应该准备重试调用。

这意味着您的生活并没有那么轻松sendfile。它比的组合更有效readwrite,但工作的程序员需要做的量是在两种情况下类似。