2011-06-08 47 views
1

如果您有一台运行在C上的服务器,然后通过Web浏览器作为客户端连接到服务器,您将如何向客户端显示HTML页面?HTML页面与C服务器?

我试着写HTML代码到客户端,但它没有工作,页面是空白的。

+1

您应该向我们展示一些代码 – 2011-06-08 20:57:31

回答

2

您的C程序必须通过打印到标准输出返回HTML到您的浏览器。前几行必须至少包含以下标题:

Content-Type: text/html 

在这一行标题之后,按照它的两个空白行,然后是HTML内容。您可以在两个空白行之前随意添加其他HTTP标头。

#include <stdio.h> 
int main(int argc,char** argv) 
{ 
    printf("Content-Type: text/html\r\n\r\n"); 
    printf("<html><head><title>C Program</title></head>\n"); 
    printf("<body><h1>It Works!</h1></body>\n"); 
    printf("</html>\n"); 
    return 0; 
} 
+1

HTTP标准实际需要\ r \ n序列。 – jbruni 2011-06-08 21:03:08

+0

所以它只是去标准输出,而不是被发送到客户端? – Sam 2011-06-08 21:03:30

+0

和一个状态码! – 2011-06-08 21:03:41

2

您需要将HTML ASCII数据通过套接字反馈到客户端。所以,你可以建立一个HTML响应头一个缓冲,一个典型的浏览器会寻找如下:

#define BUFFERSIZE 512 

char buffer[BUFFERSIZE]; 

char html_body[] = "<html><head></head><body>Hello World!</body></html>\r\n"; 

char* temp_ptr = buffer; 

int num_chars = sprintf(temp_ptr, "HTTP/1.0 200 OK\r\n"); 
temp_ptr += num_chars; 

num_chars = sprintf(temp_ptr, "Content-Type: text/html; charset=UTF-8\r\n"); 
temp_ptr += num_chars; 

num_chars = sprintf(temp_ptr, "Content-Length: %d\r\n", strlen(html_body)); 
temp_ptr += num_chars; 

num_chars = sprintf(temp_ptr, "Accept-Ranges: bytes\r\n"); 

num_chars = sprintf(temp_ptr, "Connection: close\r\n\r\n"); 
temp_ptr += num_chars; 

num_chars = sprintf(temp_ptr, html_body); 
temp_ptr += num_chars; 

int total_message_length = temp_ptr - buffer; 

int bytes_written = write(socket_file_descriptor, buffer, total_message_length); 

//... do any error-checking on your write to the socket ... 

你一定要看看more information on the HTTP protocol,以建立一个适当的网络服务器正确响应网络浏览器期待标准化的回应。

+1

'Content-Length'应该是标题之后的内容的长度,而不是缓冲区的大小。 – caf 2011-06-08 23:08:46

+0

@caf:好的,固定的。 – Jason 2011-06-08 23:11:54