2015-11-13 77 views
1

我在C(在Linux上)实现客户端和服务器,并且我想使用HTTP PUT消息将文本文件从客户端发送到服务器。如何通过HTTP在C中的tcp套接字上发送文件?

我不太确定如何做到这一点。我是否首先将HTTP请求和标题行发送到套接字上,然后使用缓冲区逐个将套接字发送到套接字上?还是在我发送它们之前,需要在它自己的HTTP请求和标题行的前面加上每一段文本文件?

我也读过关于这个函数称为sendfile,似乎它会使这更容易,但我不知道如何我会prepend一个HTTP标头和请求行的文件,如果sendfile只是直接发送文件到插座。

谢谢你的帮助。

+0

[这是一个在低级套接字上执行HTTP的最小(但不是完全严重)示例](http://codegolf.stackexchange.com/a/44592/152)。 – AShelly

+0

@ASILly没有关于PUT方法! – milevyo

+0

如果您可以发送GET,则可以发送PUT。 – AShelly

回答

3

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

是。

或者是否需要在我发送它们之前用它自己的HTTP请求和标题行预先填充每一段文本文件?

我也看了这个函数调用的sendfile这似乎是它会使这个更容易,但我不知道我怎么会在前面加上一个HTTP报头和请求行的文件如果sendfile只是将文件直接发送到套接字。

首先用正常的send发送标题,然后呼叫sendfile。但是,您应该阅读说明文档,其中说

请注意,成功调用sendfile()可能写入的字节数少于所请求的;如果 有未发送的字节,则主叫方应准备重试呼叫。

这意味着你的生活并不容易sendfile。它比readwrite的组合效率更高,但程序员需要做的工作量在两种情况下都是相似的。