【问题标题】:Returning html code返回html代码
【发布时间】:2014-01-18 05:23:07
【问题描述】:

我正在使用来自this site 的 TCPClient 代码,以便在 C 中创建一个基本的浏览应用程序。当我输入 GET /index.html 作为消息时,它会返回:

HTTP/1.0 200 OK
Date: Tue, 31 Dec 2013 08:28:44 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=38fb52774c793250:FF=0:TM=1388478524:LM=1388478524:S=8ETV1rNvlBXFrGms; expires=Thu, 31-De

除了上面的 HTTP 会话信息之外,我如何编辑代码以返回页面上的 html 代码?

【问题讨论】:

  • 你需要了解协议。 HTTP 有标题,后跟正文。标题是您发布的内容,而正文可以是任何格式(主要是 HTML)。参考:w3.org/Protocols/rfc2616/rfc2616.html

标签: html c http tcp tcpclient


【解决方案1】:

代码使用 256 字节的缓冲区,该缓冲区通常太小而无法同时存储 HTTP 标头和实际的 HTML 页面。您应该使用更大的缓冲区或从套接字读取多次。

编辑

我认为将代码的最后几行(在最后一次写入之后)替换为

do
{
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
        error("ERROR reading from socket");
    printf("%s",buffer);
} while (n > 0);

printf("\n");

会成功的。

【讨论】:

  • 抱歉,您能否解释两件事,1. 这会改变程序整体功能的方式,以及 2. bzero 函数的作用。
  • 'bzero' 将所有字节设置为零(输入 'man bzero' 获取更多信息)。它不是只将数据读入缓冲区一次,而是一直读取数据,直到“读取”函数说没有任何内容可读取。
  • @user3131007:bzero() 已弃用,请改用memset()
  • @brm 感谢您的帮助!
猜你喜欢
  • 2017-06-25
  • 2013-11-19
  • 1970-01-01
  • 2017-12-21
  • 2020-04-24
  • 2017-09-22
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多