您的位置:首页 > 理论基础 > 计算机网络

简单的传统的阻塞的httpclient

2015-09-25 10:10 507 查看
本例来自libevent官网,有一点小小的改动(把google改成了baidu



#include<netinet/in.h>
#include<sys/socket.h>
#include<netdb.h>
#include<assert.h>
#include<unistd.h>
#include<string.h>
#include<stdio.h>
int main(int argc,char* argv[])
{
const char query[]=
"GET / HTTP/1.0\r\n"
"Host:www.baidu.com\r\n"
"\r\n";
const char hostname[]="www.baidu.com";
struct sockaddr_in sin;
struct hostent* h;
const char* cp;
int fd;
int n_written,remaining;
char buf[1024];
h=gethostbyname(hostname);
assert(h!=0);
if(h->h_addrtype!=AF_INET)
{
fprintf(stderr,"no ipv6 support,sorry.");
return 1;
}
fd=socket(AF_INET,SOCK_STREAM,0);
assert(fd>=0);
sin.sin_family=AF_INET;
sin.sin_port=htons(80);
sin.sin_addr=*(struct in_addr*)h->h_addr;
int ret=connect(fd,(struct sockaddr*)&sin,sizeof(sin));
assert(ret!=-1);
cp=query;
remaining=strlen(query);
while(remaining)
{
n_written=send(fd,cp,remaining,0);
assert(n_written>0);
remaining-=n_written;
cp+=n_written;
}
while(1)
{
int result=recv(fd,buf,sizeof(buf),0);
if(result==0)
{
break;
}
else if(result<0)
{
perror("recv");
close(fd);
return 1;
}
fwrite(buf,1,result,stdout);
}
close(fd);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libevent