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

Członek DUG


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

Członek DUG


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

Członek DUG


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

Członek DUG


zadziala
sprintf(buff, "GET http://www.google.pl HTTP/1.1nn");
pobierze strone googla.
Offline

Członek DUG


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

Członek DUG


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

Członek DUG


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




Moderator Mamut
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