我正在写,可以到PUT
响应,GET
一个HTTP Web服务器,......要求 时GET
请求从浏览器发送,浏览器应该接受相关的HTML文件 我分析在Wireshark的的GET
请求它会将网站 整个HTML文件,然后在浏览器请求是在HTML文件中使用的文件的其余部分如何用c语言通过tcp以http协议发送html文件?
我的问题是,当我使用send()
功能发送和HTTP到GET
请求作出回应当从HTML文件bu读取时,包含HTML文件的HTTP消息的正文部分在浏览器中无法正确显示t当我将HTML文件输入到一个字符串变量中,并将它赋给它的作用函数send()
。
这里是我的代码:
char send_buffer[1000];
FILE *sendFile = fopen("foo.txt", "r");
while(!feof(sendFile))
{
int numread = fread(send_buffer, sizeof(unsigned char), 1000, sendFile);
if(numread < 1) break; // EOF or error
char *send_buffer_ptr = send_buffer;
do
{
int numsent = send(connected, send_buffer_ptr, numread, 0);
if(numsent < 1) // 0 if disconnected, otherwise error
{
if(numsent < 0)
{
if(WSAGetLastError() == WSAEWOULDBLOCK)
{
fd_set wfd;
FD_ZERO(&wfd);
FD_SET(connected, &wfd);
timeval tm;
tm.tv_sec = 10;
tm.tv_usec = 0;
if(select(0, NULL, &wfd, NULL, &tm) > 0)
continue;
}
}
break; // timeout or error
}
send_buffer_ptr += numsent;
numread -= numsent;
}
while(numread > 0);
}
我已经测试的代码包含在HTTP标头和下面的一些HTML代码foo的文件:
HTTP/1.1 200 OK
Content-length: 60
Content-Type: text/html
<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
我也曾经试图发送头带有一个单独的发送功能和HTML文件以及另一个发送功能。
我没有问题通过减少内容长度来发送HTML代码的一部分,主要问题是,当从文件中读取相同的HTML代码并将其发送到浏览器时,它仅显示为HTML代码 – 2014-11-21 17:24:39
After发送文件的确切内容长度的工作! 非常感谢。 – 2014-11-21 19:17:07
考虑在响应中使用'Transfer-Encoding:chunked',那么您根本不需要'Content-Length'头,您可以在从文件中读取文件数据时发送文件数据,并且可以向客户端发送信号在结束时以0长度的块结束。 – 2014-11-22 16:31:38