在c中构建简单的http客户端

时间:2014-02-21 19:27:10

标签: c sockets http

sprintf(send_data,"GET / HTTP/1.1\r\nHost: %s\r\n\r\n",hoststr);
printf("%s",send_data);
send(sock,send_data,strlen(send_data), 0);
while(bytes_recieved)
  {
    bytes_recieved=recv(sock,recv_data,1024,0);
    printf("%d\n",bytes_recieved);
    if(bytes_recieved==0){ break; }
    recv_data[bytes_recieved] = '\0';
    printf("%s" , recv_data);
  }

当我要求例如“www.example.com”时, 我得到整个页面,然后在两三秒后结束我打印bytes_received('0')然后循环中断。

为什么打破循环需要2-3秒?

有没有更好的方法来实现简单的http客户端呢?

感谢。

2 个答案:

答案 0 :(得分:1)

作为HTTP协议的优化,1.1版添加了默认持久连接(又名Connection: Keep-Alive)。 keep-alive保持连接打开,以便您可以通过“可靠”通道发送其他请求;您可以在RFC2616 Section 8.1 - Persistent Connections中找到有关HTTP协议部分的其他信息。

答案 1 :(得分:0)

recv返回0时,意味着连接的另一端已经很好地关闭了连接。

HTTP从一开始就是一个纯粹的请求 - 响应协议,其中每个请求都得到一个响应,然后是一个封闭的连接。

您在这里看到的是,首先您收到所请求的页面,然后在超时后(由于更新版本的HTTP协议(您说支持)保持连接打开)从服务器关闭连接