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客户端呢?
感谢。
答案 0 :(得分:1)
作为HTTP协议的优化,1.1版添加了默认持久连接(又名Connection: Keep-Alive
)。 keep-alive保持连接打开,以便您可以通过“可靠”通道发送其他请求;您可以在RFC2616 Section 8.1 - Persistent Connections中找到有关HTTP协议部分的其他信息。
答案 1 :(得分:0)
当recv
返回0
时,意味着连接的另一端已经很好地关闭了连接。
HTTP从一开始就是一个纯粹的请求 - 响应协议,其中每个请求都得到一个响应,然后是一个封闭的连接。
您在这里看到的是,首先您收到所请求的页面,然后在超时后(由于更新版本的HTTP协议(您说支持)保持连接打开)从服务器关闭连接