Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-05-07 23:28:14

  mi5tic - Członek DUG

mi5tic
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-08-24

[C] Sockety - problem z pobraniem źródła strony

Witam

Piszę pewien projekt, lecz zatrzymałem się na niewielkiej jego części - pobieraniu źródła.
Łączy się, lecz ilość pobranych danych jest równa 0 za każdym razem :/
Szukałem, próbowałem wielu rzeczy, lecz nic nie pomogło.
Może ktoś ma jakiś pomysł?
//próbowałem też nie używać gethostbyname tylko pobierać adres przez inet_addr("00.00.00.00"); //oczywiście w nawiasie podałem prawdziwy adres ip. lecz bez skutku

Kod:

#define BUFF_SIZE 512

int main(void)
{
  const char *host = "jakis_adres.domena"; 

  int     SockFd;                      /* deskryptor gniazda */
  struct  sockaddr_in  serv_addr;     /* adres gniazda serwera */  
  char      buff[BUFF_SIZE];               /* bufor */
  struct hostent *serv_haddr;        
  int        ReadBytes;                /* ilosc otrzymanych danych */


    /* utworzenie gniazda */    
    if( (SockFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
      perror("socket()");
      exit(1);
    }

    /* pobierz adres ip serwera */
    if( (serv_haddr = gethostbyname(host)) == NULL)
    {
        perror("gethostbyname()");
        exit(1);
    }
    

    /* ustawienie wlasciwosci gniazda serwera */
    memset( &serv_addr, 0, sizeof(serv_addr) );
    serv_addr.sin_family = serv_haddr -> h_addrtype;
    serv_addr.sin_port     = htons(80);
    memcpy( (char *)&serv_addr.sin_addr.s_addr, serv_haddr -> h_addr, serv_haddr -> h_length);

    /* nawiazanie polaczenia */
    if( connect(SockFd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) )
    {
      perror("connect()");
      exit(1);
    }

    memset( buff, '', sizeof(buff) );    /* wyczyszczenie bufora */
    sprintf(buff, "GET http://%s HTTP/1.1", host);    
    send(SockFd, buff , strlen(buff), 0);
    
    do
    {
        memset( buff, '', sizeof(buff) );
        ReadBytes = recv(SockFd, buff, BUFF_SIZE, 0);            
        printf("%d", ReadBytes);
        if(ReadBytes > 0)
        {        
            //operacje na pobranych danych
        }        
    } while(ReadBytes > 0);

  close(SockFd);
  return 0;
}

z góry dzięki za wszelką pomoc
pzdr.


Lubię słowo indolencja.
Dzięki niemu moje lenistwo wydaje się czymś niezwykle wyrafinowanym.

- Bern Williams

Offline

 

#2  2007-05-08 00:58:31

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: [C] Sockety - problem z pobraniem źródła strony

dziala.

Kod:

#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>

#define BUFF_SIZE 512

int main(void)
{
  const char *host = "www.apacheweek.com";

  int     SockFd;                     /* deskryptor gniazda */
  struct  sockaddr_in  serv_addr;    /* adres gniazda serwera */ 
  char     buff[BUFF_SIZE];            /* bufor */
  struct hostent *serv_haddr;      
  int       ReadBytes;            /* ilosc otrzymanych danych */


   /* utworzenie gniazda */   
   if( (SockFd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
   {
     perror("socket()");
     exit(1);
   }

   /* pobierz adres ip serwera */
   if( (serv_haddr = gethostbyname(host)) == NULL)
   {
      perror("gethostbyname()");
      exit(1);
   }
   

   /* ustawienie wlasciwosci gniazda serwera */
   memset( &serv_addr, 0, sizeof(serv_addr) );
   serv_addr.sin_family = serv_haddr -> h_addrtype;
   serv_addr.sin_port    = htons(80);
   memcpy( (char *)&serv_addr.sin_addr.s_addr, serv_haddr -> h_addr, serv_haddr -> h_length);

   /* nawiazanie polaczenia */
   if( connect(SockFd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) )
   {
     perror("connect()");
     exit(1);
   }

   memset( buff, '', sizeof(buff) );   /* wyczyszczenie bufora */
   sprintf(buff, "GET / HTTP/1.0nn");   

   printf("sent %d %sn", send(SockFd, buff , strlen(buff), 0), buff);
   do
   {
      memset( buff, '', sizeof(buff) );
      ReadBytes = recv(SockFd, buff, BUFF_SIZE, 0);         
      printf("%s", buff);
      if(ReadBytes > 0)
      {      
         //operacje na pobranych danych
      }      
   } while(ReadBytes > 0);

  close(SockFd);
  return 0;
}

apt-get install anarchism

Offline

 

#3  2007-05-08 20:31:41

  mi5tic - Członek DUG

mi5tic
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-08-24

Re: [C] Sockety - problem z pobraniem źródła strony

Ogromne dzięki :)
Tyle się nasiedziałem nad kodem...a tu taka 'drobnostka' ;]

Btw. To, że zapomniałem o znakach nowej linii to fakt..ale czy może mi ktoś wytłumaczyć dlaczego HTTP 1.1 nie zadziała ?

z góry thx
pzdr.


Lubię słowo indolencja.
Dzięki niemu moje lenistwo wydaje się czymś niezwykle wyrafinowanym.

- Bern Williams

Offline

 

#4  2007-05-08 22:17:39

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: [C] Sockety - problem z pobraniem źródła strony

zadziala

Kod:

sprintf(buff, "GET http://www.google.pl HTTP/1.1nn");

pobierze strone googla.


apt-get install anarchism

Offline

 

#5  2007-05-08 22:48:27

  mi5tic - Członek DUG

mi5tic
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-08-24

Re: [C] Sockety - problem z pobraniem źródła strony

hmm...to już nie wiem..widać strona, którą pobieram jest wyjątkowa [;
nvm, ważne, że działa przy 1.1 ;]
Jeszcze raz dzięki za pomoc

pzdr.


Lubię słowo indolencja.
Dzięki niemu moje lenistwo wydaje się czymś niezwykle wyrafinowanym.

- Bern Williams

Offline

 

#6  2007-05-08 23:32:30

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: [C] Sockety - problem z pobraniem źródła strony

spoprobuj telnetem polaczyc sie z ta strona i zobacz co jest grane


apt-get install anarchism

Offline

 

#7  2007-05-09 06:55:58

  mi5tic - Członek DUG

mi5tic
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-08-24

Re: [C] Sockety - problem z pobraniem źródła strony

Dziwne...gdy wcześniej testowałem to przy 1.1 liczba pobranych danych była cały czas równa 0...a teraz jest ok.. :/

pzdr.


Lubię słowo indolencja.
Dzięki niemu moje lenistwo wydaje się czymś niezwykle wyrafinowanym.

- Bern Williams

Offline

 

#8  2007-05-13 18:48:09

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: [C] Sockety - problem z pobraniem źródła strony

hmm...to już nie wiem..widać strona, którą pobieram jest wyjątkowa [;
nvm, ważne, że działa przy 1.1 ;]

w wersji 1.1 jest obowiazkowy naglowek Host: i gdy go niemam moze zostac zwrocony blad 400


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)