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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить данные через сокет в C++? 
V
    Опции темы
americanets
Дата 26.11.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



как получать данные через сокеты в  C++ погуглив не смог разобраться


Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <iostream>


int main () {
    int m_sock;
    sockaddr_in m_addr;
    m_addr.sin_family = AF_INET;
    m_addr.sin_port = htons ( 80 );
    m_sock = socket ( AF_INET, SOCK_STREAM, 0 );
    int status = inet_pton ( AF_INET, "google.ru", &m_addr.sin_addr );
    status = ::connect ( m_sock, ( sockaddr * ) &m_addr, sizeof ( m_addr ) );
    if ( status != 0 ) {
        std::cout << "Error" << std::endl;
    }
    return 0;
}



как мне получить контент страницы и заголовки ответа ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
MAKCim
Дата 26.11.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



1. читай внимательно man по inet_pton
эта функция принимает IPv4/6 адреса в строковом представлении, а не имя хоста
для начала нужно воспользовать резолвером типа getaddrinfo

2.
Цитата(americanets @  26.11.2008,  11:01 Найти цитируемый пост)
как мне получить контент страницы и заголовки ответа ?  

через send/write отправить GET запрос хосту, потом через recv/read прочитать ответ


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Эксперт
***


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

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



MAKCim, а про 2-е можно по подробнее  smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
jonie
Дата 27.11.2008, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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





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


Эксперт
***


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

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



jonie, почитал



MAKCim, что -то не получается, виснет и все 


Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <iostream>
#include <string.h>


int main () {
    int m_sock;
    char buf [ 501 ];
    const std::string s = "ds";
    sockaddr_in m_addr;
    m_addr.sin_family = AF_INET;
    m_addr.sin_port = htons ( 80 );
    m_sock = socket ( AF_INET, SOCK_STREAM, 0 );
    int status = inet_pton ( AF_INET, "127.0.0.1", &m_addr.sin_addr );
    status = ::connect ( m_sock, ( sockaddr * ) &m_addr, sizeof ( m_addr ) );
    if ( status != 0 ) {
        std::cout << "Error" << std::endl;
    }
    memset ( buf, 0, 501);
    status = ::send ( m_sock, s.c_str(), s.size(), MSG_NOSIGNAL );
    status = ::recv ( m_sock, buf, 501, 0 );
    std::cout << buf << std::endl;
    return 0;
}



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
MAKCim
Дата 27.11.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



americanets, 
рискну предположить, что на локальном хосте не запущен HTTP сервер  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
americanets
Дата 28.11.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



MAKCim, не , все работает (127.0.0.1) открывается


Код

ping -c1 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.041 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.041/0.041/0.041/0.000 ms




--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
MAKCim
Дата 28.11.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



americanets, 
все правильно, loopback интерфейс и будет пинговаться
но это совсем не значит, что есть сервер, слушающий 80-ый порт с него  smile 
короче, советую сначала ознакомиться с литературой


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
americanets
Дата 28.11.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



понятно пошел читать , сервер есть , апач , он какраз на 80 висит


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
MAKCim
Дата 28.11.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(americanets @  28.11.2008,  14:09 Найти цитируемый пост)
он какраз на 80 висит

Он точно забинден на локальный адрес 127.0.0.1?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
americanets
Дата 28.11.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



да , там phpadmin висит через браузер 127.0.0.1:80 открывается и показывает 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Олег2005
Дата 30.11.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

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



Цитата(americanets @  27.11.2008,  09:12 Найти цитируемый пост)
что -то не получается, виснет и все 

А что виснет то? Где именно?
Почему после вызова сетевых функций нет анализа кода возврата? - обязательного для сетевых программ - причин повисания може быть несколько - как понять то?
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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