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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
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
#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.
Offline
dziala.
#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; }
Offline
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.
Offline
zadziala
sprintf(buff, "GET http://www.google.pl HTTP/1.1nn");
pobierze strone googla.
Offline
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.
Offline
spoprobuj telnetem polaczyc sie z ta strona i zobacz co jest grane
Offline
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.
Offline
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
Offline
Strony: 1