Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с веб сервером 
:(
    Опции темы
Router
Дата 25.2.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.11.2007

Репутация: нет
Всего: нет



Задумка такая:
я хочу написать клиентскую программу которая посилает запрос удаленому веб-серверу, и веб-сервер пресилает моей программе ответ с html страницей.
Я попытался написать но чот он не работает, вот его код
Код

#include <windows.h>
#include <iostream>
using namespace std;

typedef sockaddr_in ADDRES;

void main ()
{
    WSAData data;
    if (WSAStartup(2, &data) != 0) return;

    SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET) return;

    ADDRES addr; memset(&addr, 0, sizeof(addr));

    addr.sin_family = PF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.S_un.S_addr = inet_addr("217.20.163.111");

    if (connect(sock, (sockaddr*) &addr, sizeof(addr)) != 0) return;
    cout << "connected success!!!" <<endl;

    const int l = 10240;
    char ans [1024];
    char ask [l];
    strcpy(ask, "GET /status HTTP/1.1");
    int recv_res;
    

    while (true)
    {
        if (send(sock, ask, strlen(ask), 0) == 0) return;
        recv_res = recv(sock, ans, sizeof(ans), 0);
        ans [recv_res] = 0;
    }
}

PM MAIL   Вверх
jonie
Дата 25.2.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



а собственно протокол стоит почитать ...
Код

GET / HTTP/1.1
Accept: */*
Host: 111.222.333.444


и про \n\r не забывать...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Router
Дата 25.2.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.11.2007

Репутация: нет
Всего: нет



Вот переписал всеровно сервер не пресилает нечего
если запрос не верный подскажите как будет верно!!!
Код

#include <windows.h>
#include <iostream>
using namespace std;

typedef sockaddr_in ADDRES;

void main ()
{
    WSAData data;
    if (WSAStartup(2, &data) != 0) return;

    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET) return;

    ADDRES addr; memset(&addr, 0, sizeof(addr));

    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.S_un.S_addr = inet_addr("217.20.163.111");

    if (connect(sock, (sockaddr*) &addr, sizeof(addr)) != 0) return;
    cout << "connected success!!!" <<endl;

    const int l = 10240;
    char ans [1024];
    char ask [l];
    strcpy(ask, "GET /status HTTP/1.1\n\r");
    strcat(ask, "User-Agent: Opera/9.21 (Windows NT 5.1; U; ru)\n\r");
    strcat(ask, "Host: 10.45.11.171\n\r");
    strcat(ask, "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\n\r");
    strcat(ask, "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\n\r");
    strcat(ask, "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\n\r");
    strcat(ask, "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\n\r");
    strcat(ask, "Connection: Keep-Alive\n\r");
    int recv_res;
    

    while (true)
    {
        if (send(sock, ask, strlen(ask), 0) == 0) return;
        recv_res = recv(sock, ans, sizeof(ans), 0);
        ans [recv_res] = 0;
        cout << ans << endl;
    }
}

PM MAIL   Вверх
jonie
Дата 25.2.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата

strcat(ask, "Connection: Keep-Alive\n\r");
а не мало \n\r ? вроде по стандарту 2-а таких должно быть как признак конца заголовка ... (свертесь со стандартом + слишком много в заголовке, достаточно того что привел я) ....



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Router
Дата 26.2.2008, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.11.2007

Репутация: нет
Всего: нет



Незнаю мне кажетса дело не в запросе, я гдет может неправельно алгаритм составил, попробуйте пожалуйста сами написать вель она и не такая большая, буду очень благодарен.
Вот код, и проблема в том что отклика от сервера нет, программа зависает на получении данных.
Код

#include <windows.h>
#include <iostream>
using namespace std;

typedef sockaddr_in ADDRES;

void main ()
{
    WSAData data;
    if (WSAStartup(2, &data) != 0) return;

    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET) return;

    ADDRES addr; memset(&addr, 0, sizeof(addr));

    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.S_un.S_addr = inet_addr("217.20.163.111");

    if (connect(sock, (sockaddr*) &addr, sizeof(addr)) != 0) return;

    const int l = 10240; char ans [1024]; char ask [l];

    strcpy(ask, "GET /status HTTP/1.1\n\r");
    strcat(ask, "Host: 10.45.11.171\n\r");
    strcat(ask, "Accept: text/html\n\r");
    strcat(ask, "Connection: Keep-Alive\n\r\n\r");

    if (send(sock, ask, strlen(ask), 0) == 0) return;

    int recv_res;

    cout << "connected success!!!" <<endl;
    

    while (true)
    {
        recv_res = recv(sock, ans, sizeof(ans), 0);
        ans [recv_res] = 0;
        cout << "ans: ";
        cout << ans << endl;
    }
}

PM MAIL   Вверх
ptr
Дата 26.2.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Router, данный вопрос тут уже обсуждался и не раз. Так что используй поиск.

Да и нужно "\r\n" ;-)


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Router
Дата 26.2.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.11.2007

Репутация: нет
Всего: нет



Ой я не могу (гаагагага), я даже представить не мог что \n\r  и  \r\n ето 2 разные веши
Я умераю со смеха )))
Пасиба всем все идет!!!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0800 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.