我对C语言比较陌生,他尝试使用教授给我的一些代码,然后从那时起对其进行修改,以帮助我完成服务器项目。我无法弄清楚如何真正能够在lynx中看到HTML,我只是得到HTTP响应。 (我可以卷曲它并查看我要发送的内容,但是浏览器将不会加载HTML正文)我一直在检查我能想到的所有内容,但是在这一点上我不得不承认我对HTTP并不了解回应,并可以朝着正确的方向迈出一步。
-c-1
答案 0 :(得分:1)
memset( buffer, 0, BUFFER_SIZE );
n = read( new_socket_fd, buffer, ( BUFFER_SIZE-1 ) );
if (n==0){
fprintf( stderr, "Connection to client lost\n\n" );
break;
}
else if( n < 0 ){
fprintf(stderr,"Error reading from socket %s\n",
strerror(errno));
}
/* Print the message we received */
printf("Message received: %s\n" ,buffer);
在TCP连接上调用read
时,您不会收到任何消息。如果要接收HTTP消息,则必须编写代码来做到这一点。这只是坏了。
sprintf( send_client, "HTTP/1.0 %s%s\r\nServer: ECE435\r\n"
"Last-Modified: Fri, 08 Sep 2017 04:31:47 GMT\r\n"
"Content-Length: 85\r\nContent-Type: text/html\r\n\r\n", HTTP__OK, timestamp );
除非文件恰好恰好包含85个字节,否则发送“ Content-Length”标头并不是一个好主意。
您有一个while(1)
循环,似乎正在尝试通过单个连接接收多个消息。但是没有代码来确定您何时真正收到了HTTP请求,因此绝对无法正常工作。
HTTP协议很复杂,要正确地实现它,编写代码需要经过该标准并实现该标准所需的所有内容。这段代码并没有做到这一点,如果它确实起作用了,那将主要是靠运气。
您可能只是修改“ Content-Length”标头以使其具有正确的长度而无所适从。但是您仍然违反许多规则。例如,由于不确保read
返回整个HTTP请求,因此可以轻松地对一个请求发送多个响应。