[英]building simple http client in c
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客户端呢?
谢谢。
作为HTTP协议的优化,版本1.1添加了默认的持久连接(aka Connection: Keep-Alive
)。 保持活动状态使连接保持打开状态,以便您可以通过“可靠”通道发送其他请求; 您可以在RFC2616第8.1节-持久连接中找到有关HTTP协议那部分的其他信息。
当recv
返回0
,表示连接的另一端已很好地关闭了连接。
HTTP从一开始就是纯粹的请求-响应协议,其中每个请求都得到响应,然后是封闭的连接。
您在这里看到的是,首先收到请求的页面,然后在超时(由于HTTP协议的较新版本(您说支持)使连接保持打开状态)之后,服务器关闭了连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.