Форум: Форум C++Разное
Новые темы: 00
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скачать страницу сокетами
 
 автор: Quies   (04.10.2008 в 17:22)   письмо автору
 
 

Ни, как не получается получить код веб страницы с помощью сокетов, зная адрес (например www.mail.ru). А потом вывести в консоль, либо сохранить в файл.
У меня Linux OpenSUSE, Kdevelop.
Использовал код этой статьи http://www.opennet.ru/docs/RUS/linux_parallel/node82.html.

Вот код что я испытывал:

#include <iostream>
#include <cstdlib>

#include <sys/types.h>
#include <sys/socket.h>

#include <stdio.h>
#include <sys/un.h>

#define ADDRESS "www.mail.ru" /* адрес для связи */ 

using namespace std;


int main(int argc, char *argv[])
{
  

  char c;

  int i, s, len;

  FILE *fp;

  struct sockaddr_un sa; 

// создаём сокет
s = socket(AF_INET, SOCK_STREAM, 0);

// проверка создания сокета
if(s < 0) {
perror("socket");
exit(1);
// конец условия

  sa.sun_family = AF_UNIX;

  strcpy (sa.sun_path, ADDRESS);

  /* пытаемся связаться с сервером: */

  len = sizeof ( sa.sun_family) + strlen ( sa.sun_path);



  if ( connect ( s, &sa, len) < 0 ){

    perror ("client: connect"); exit (1);

  }

 close (s); 


  return EXIT_SUCCESS;
}



Выдаёт ошибку: /home/quies/Develop/C++/http/src/http.cpp:74: error: cannot convert 'sockaddr_un*' to 'const sockaddr*' for argument '2' to 'int connect(int, const sockaddr*, socklen_t)'

Это только конект,. а хотелось бы получить ещё страницу. Но до этого пока не дошел.

  Ответить  
 
 автор: Quies   (05.10.2008 в 17:35)   письмо автору
 
   для: Quies   (04.10.2008 в 17:22)
 

Пока, вышел такой код:


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

 #include <iostream>
#include <cstdlib>

#include <sys/types.h>
#include <sys/socket.h>

#include <stdio.h>
#include <sys/un.h>
#include <arpa/inet.h>


#define NSTRS       30           /* no. of strings  */

using namespace std;


int main ( int argc, char *argv[] )
{

 char c;
 FILE *fp;
 int i;


 int thisSocket;
 struct sockaddr_in destination;

 destination.sin_family = AF_INET;
 thisSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
 if (thisSocket < 0)
 {
  printf("\nSocket Creation FAILED!");
  return 0;
 } else {

destination.sin_port = htons(80);
destination.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(thisSocket,(struct sockaddr*)&destination,sizeof(destination))!=0){
printf("\nSocket Connection FAILED!\n");
if (thisSocket) close(thisSocket);
return 0;
}
printf("\nConnected!");


fp = fdopen(thisSocket, "r");

    for (i = 0; i < NSTRS; i++) {
        while ((c = fgetc(fp)) != EOF) {
            putchar(c);

            if (c == '\n')
                break;
        }
    }

printf("%s",c);

// конец условия

 close(thisSocket);

 return EXIT_SUCCESS;
}


Успешно компилируется, соединяется с сервером. Выводит пустую строку. Но дальше не знаю что делать,.. как вытащить страницу сайта,.. и как вообще зайти не по ip, а по имени домена. и пути до файла. Скажем http://www.site.ru/test.html

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования