Pobieranie strony

0

Witam,
chciałbym móc pobierać plik html podanej strony. Na razie mam coś takiego:

void connect(int browserSocked, string ip_addr, string page)
{
    int socketDesc;
   char buf[256]; 

   struct addrinfo hints{};
    hints.ai_family   = PF_UNSPEC;
    hints.ai_protocol = IPPROTO_TCP;
   struct addrinfo *addr;

   getaddrinfo( ip_addr.data(), "80", &hints, &addr );

    socketDesc  = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(socketDesc == -1)
    {
        cout << "Failed set socket!!!" << endl;
        return;
    }

    if(connect(socketDesc, addr->ai_addr, sizeof( struct sockaddr_in )) < 0)
    {
        cout << "Failed to connect!!!" << endl;
        return;
    }

    sprintf(buf, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: bsc.c\r\n\r\n", page.data(), ip_addr.data());
    write(socketDesc, buf, strlen(buf));

    while((recv(socketDesc, buf, sizeof(buf), 0)) > 0)
        write(browserSocked, buf, sizeof(buf));

    close(socketDesc);
    close(browserSocked); 
}

int main()
{
    signal(SIGINT, signal_callback_handler);

    #define SERVER_PORT 5555
    #define QUEUE_SIZE 1
    int nSocketDesc, nClientSocket;
    int nBind, nListen;
    struct sockaddr_in stAddr, stClientAddr;
    socklen_t sockAddrSize;
    char buffer[50];
    string ip_addr = "";
    int nFoo = 1;
    string page = "";

    stAddr.sin_family = AF_INET;
    stAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    stAddr.sin_port = htons(SERVER_PORT);

    nSocketDesc = socket(AF_INET, SOCK_STREAM, 0);
    if(nSocketDesc < 0)
    {
        cout << "Can't create a socket!!!" << endl;
        exit(1);
    }
    setsockopt(nSocketDesc, SOL_SOCKET, SO_REUSEADDR, (char*) &nFoo, sizeof(nFoo));

    nBind = bind(nSocketDesc, (struct sockaddr*) &stAddr, sizeof(struct sockaddr));
    if(nBind < 0)
    {
        cout << "Can't bind a name to a socket!!!" << endl;
       exit(2);
    }

    nListen = listen(nSocketDesc, QUEUE_SIZE);
    if(nListen < 0)
    {
        cout << "Can't set queue size!!!" << endl;
        exit(3);
    }

    while(true)
    {
        sockAddrSize = sizeof(struct sockaddr);
        nClientSocket = accept(nSocketDesc, (struct sockaddr*) &stClientAddr, &sockAddrSize);
        if(nClientSocket < 0)
        {
            cout << "Can't create a connection's socket!!!" << endl;
            exit(4);
        }      

        string temp;
        if(read(nClientSocket, buffer, sizeof(buffer)) > 0)
            temp = buffer;

        if(temp.empty() == true)
            continue;

        unsigned int i;
        for(i = 0; i < temp.size(); i++)
        {
             if(temp[i] == '/')
                break; 
             else if(temp[i] == '\n')
             {
                ++i;
                break;
             }
             ip_addr += temp[i];           
        }
        if(i == temp.size())
            page = "/";
        else
        {
            for(; i < temp.size(); i++)
                page += temp[i];            
        }                  

        connect(nClientSocket, ip_addr, page); 
        ip_addr = "";
        page = "";
    }

    close(nSocketDesc);
    return 0;
}

Łącze się poprzez netcata i wysyłam na nClientSocket stringa np. 'www.google.pl'. Jednak działa to różnie i zwraca błąd, który zwrócił web serwer.
Czy poprawnie wysyłam zapytanie?
Jak mogę zmodyfikować kod bym mógł z przeglądarki łączyć się poprzez mój serwer z dowolną stroną?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0