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

时间:2015-11-13 18:55:03

标签: c sockets http tcp

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

我不确定该怎么做。我首先在套接字上发送HTTP请求和标题行,然后使用缓冲区通过套接字将文件发送到套接字上吗?或者在发送之前是否需要在文本文件的每一部分前加上自己的HTTP请求和标题行?

我还读到了这个名为sendfile的函数,看起来它会让这更容易,但我不确定如果sendfile只将文件直接发送到文件,我将如何预先添加HTTP头和请求行。插座。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

  

我首先在套接字上发送HTTP请求和标题行,然后使用缓冲区通过套接字发送文件吗?

是。

  

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

没有

  

我还读到了这个名为sendfile的函数,看起来它会让这更容易,但我不知道如果sendfile只是将文件直接发送到套接字,我会如何在文件前面添加一个HTTP头和请求行。

首先使用正常send发送标头,然后拨打sendfile。但是,您应该阅读文档,其中说

  

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

这意味着使用sendfile让您的生活更轻松。它比readwrite的组合更有效,但程序员在两种情况下需要做的工作量相似。

答案 1 :(得分:0)

如果要实施HTTP传输协议,请检查此RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.2

否则,如果您想要自己的简单方法,那么您可以实现一个API,例如DWORD(cmdPut)+filename+'\0'+DWORD(fileLen)+fileBinaryData.