1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
int sockfd,n=0; // descripteur de socket
struct sockaddr_in serveur= {0}; // structure d'adresse qui contiendra les param reseaux du serveur
struct hostent *hostinfo=NULL; // structure pour recuper l'adresse ip
char *buf[1024];
char requet[1024];
// ENVOIT D'UNE REQUETE //
// verification du nombre d'arguments sur la ligne de commande
if(argc != 4)
{
printf("Usage: %s @serveur port_serveur string\n", argv[0]);
exit(-1);
}
// creation de la socket
sockfd = socket(PF_INET,SOCK_STREAM,0);
// initialisation de la structure d'adresse du serveur :
// famille d'adresse
serveur.sin_family = AF_INET;
// recuperation de l'adresse IPv4 du serveur
hostinfo = gethostbyname(argv[1]); /* on récupère les informations de l'hôte auquel on veut se connecter */
if (hostinfo == NULL) /* l'hôte n'existe pas */
{
fprintf (stderr, "Unknown host %s.\n", argv[1]);
exit(-2);
}
serveur.sin_addr = *(struct in_addr*) hostinfo->h_addr; /* l'adresse se trouve dans le champ h_addr de la structure
hostinfo */
// recuperation du port du serveur
serveur.sin_port = htons(atoi(argv[2]));
printf("Tentative de connexion\n");
// tentative de connexion
if(connect(sockfd,(struct sockaddr *)&serveur, sizeof(serveur)) == -1)
{
perror("Erreur de connexion -> ");
exit(-3);
}
printf("Connexion etablie\n");
// envoi
sprintf( requet,
"GET %s HTTP/1.0\r\n"
"Host: %s:%d\r\n"
"Connection: Close\r\n"
"\r\n",
argv[3],argv[1], argv[2]);
if(send(sockfd,requet,strlen(requet),0)== -1)// on envoie la requête HTTP.
{
perror("Erreur lors de l'appel a send -> ");
exit(-4);
}
// recéption
if((n = recv(sockfd, buf, sizeof buf - 1, 0)) < 0)
{
perror("Erreur lors de l'appel a recv ->");
exit(-5);
}
buf[n] = '\0';
// afficher le resultat sur la console
write( 1,buf,sizeof (buf));
// fermeture de la socket
close(sockfd);
printf("deconnexion\n");
return 0;
} |
Partager