我正在寫,可以到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