home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
GianuzziV
/
SO1
/
echo_client_web.c
< prev
next >
Wrap
C/C++ Source or Header
|
2005-04-05
|
5KB
|
176 lines
/* echo_client_web.c
si collega con il server WEB sulla macchina "host"
In questa versione simula il comportamento di un browser
che si connette con la pagina index.html del WEB server indicato.
L'host client e' fisso e si chiama "arsenio".
Lavorando dalla macchina "pinco", sostituire "arsenio" con "pinco" nella
stringa dove si identifica il chiamante.
L'output e' la pagina index.html del WEB server della macchina "host".
Ovviamente, deve esistere un WEB server su "host" (ad esempio usare arsenio).
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define SERVER 80 // well known WEB server port
main (argc, argv)
int argc;
char **argv;
{ int sockfd; /* socket descr. */
int len; /* n.ro byte dati ricevuti */
struct sockaddr_in sa; /* indirizzo Internet */
struct hostent *hp; /* risultato host name lookup */
struct servent *sp; /* risultato service lookup */
char buf[BUFSIZ]; /* informazioni da whois */
char *myname; /* nome di questo eseguibile */
char *host; /* nome dell'host remoto */
char stringa[2000]; /* stringa da scambiare con server WEB */
char *result;
myname=argv[0];
if (argc != 2) {
printf("Usage: %s host \n", myname);
exit(1);
}
host=argv[1];
if (( hp=gethostbyname(host) )==NULL) {
printf("%s: %s: no such host \n", myname, host);
exit(1);
}
/* costruisce la struttura che contiene l'indirizzo dell'host
da contattare, e il tipo di indirizzamento usato */
bcopy((char *) hp->h_addr, (char *) &sa.sin_addr, hp->h_length);
sa.sin_family=hp->h_addrtype;
/* inserisce il socket number dentro la struttura del socket */
sa.sin_port=htons((short int) SERVER);
/* richiede un descrittore di socket */
if (( sockfd=socket(hp->h_addrtype, SOCK_STREAM, 0))<0 ) {
printf("%s: errore apertura socket \n", myname);
exit(1);
}
/* mi connetto con il server remoto */
if (connect(sockfd, (struct sockaddr *) &sa, sizeof sa)<0)
{
printf ("%s: connessione rifiutata \n", myname);
exit(1);
}
sprintf(stringa, "GET / HTTP/1.0");
len=strlen(stringa);
stringa[len]=13; // CR
stringa[len+1]=10; // LF
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Connection: Keep-Alive");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "User-Agent: Mozilla/4.78 [en] (X11; U; Linux 2.4.2 i686)");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Host: arsenio.disi.unige.it");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Accept-Encoding: gzip ");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Accept-Language: en ");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
sprintf(stringa, "Accept-Charset: iso-8859-1,*,utf-8 ");
len=strlen(stringa);
stringa[len]=13;
stringa[len+1]=10;
stringa[len+2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
stringa[0]=13;
stringa[1]=10;
stringa[2]='\0';
if (write(sockfd, stringa, strlen(stringa)) != strlen(stringa))
{
printf("%s: write error \n", myname);
exit(1);
}
/* ricevo la replica */
while ((len=read(sockfd, buf, BUFSIZ))>0)
write(0, buf, len);
close(sockfd);
exit(0);
}