/******************************
简单WEB客户机
直接连接服务器(不支持代理)
web_client.cpp
******************************/
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
using std::cout;
using std::endl;
using std::cerr;
int main(int argc, char** argv)
{
const char *host_name = // host name
argc > 1 ? argv[1] : "202.116.77.131";
const int port = 80; // http port
const int buf_size = 1024 * 200; // buffer size;
char buffer[buf_size]; // save html
const char* message = "GET /index.html HTTP/1.0/n/n";
int socket_; // socket
sockaddr_in pin; // sockaddr
hostent *phost;
// get host name
if ( (phost = gethostbyname(host_name)) == NULL )
{
cerr << "can not get host name!" << endl;
return 1;
}
memset(buffer, 0, buf_size); // clear buffer
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = htonl(INADDR_ANY);
pin.sin_addr.s_addr = ( (struct in_addr*)
(phost->h_addr))->s_addr;
pin.sin_port = htons(port);
// create socket
if ( (socket_ = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
cerr << "create socket error!" << endl;
return 1;
}
// connect to server
if ( connect(socket_, (sockaddr*)&pin, sizeof(pin) ) == -1)
{
cerr << "can not connect to server" << endl;
close(socket_);
return 1;
}
// send HTTP request
if ( send(socket_, message, strlen(message), 0) == -1 )
{
cerr << "error in send" << endl;
close(socket_);
return 1;
}
// receive HTTP response
if ( recv(socket_, buffer, buf_size, 0) == -1 )
{
cerr << "error in receiving response message..."
<< endl;
close(socket_);
return 1;
}
cout << buffer << endl;
close(socket_); // close socket
return 0;
}