Bonjour,
j'ai fait un petit programme qui envoie une requête HTML via la méthode GET et qui affiche le résultat récupéré (méthode recv) dans un buffer.
Ça marche, c'est déjà pas mal pour moi !!!
Mais, l'affectation au pif de la taille du buffer pour stocker la réponse du serveur ne me plait pas :

  • y a-t-il moyen de connaitre la taille du fichier index.html avant de le charger dans mon buffer et ainsi écrire la bonne taille de buffer ?
  • est-ce que c'est mieux de choisir une petite taille de buffer et de créer une boucle sur la fonction recv pour récurer au fur et à mesure la réponse du serveur ?


Qu'en pensez-vous ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>
 
#define PORT 80
#define ip "xxxxxxxxxxxx"
 
int main(int argc,char * argv[]){
 
//structure du socket :
    struct sockaddr_in adresse;
    adresse.sin_family=AF_INET;
    adresse.sin_port = htons(PORT);
    adresse.sin_addr.s_addr=inet_addr(ip);
    int longueur=sizeof(adresse);
 
//creation du socket :
    int socketSiteHtml;
    if((socketSiteHtml=socket(AF_INET,SOCK_STREAM,0))<0){
    fprintf(stderr,"la socket a echouee\n");
    perror("ouverture socket");
    }
 
//connexion au site distant :
    if(connect(socketSiteHtml,(struct sockaddr *) &adresse,longueur)==0)
        {
        printf("connexion réusie\n");
        }
    else
        {
        perror("Connexion");
        exit(EXIT_FAILURE);
        }
//le message
int n;
char * message;
char * buffer[1000];
message="GET /index.php HTTP/1.1\r\nHost:www.truc.fr\n\r\n";
    if(send(socketSiteHtml,message,strlen(message)+1,0)==-1){
        perror("send");
        return EXIT_FAILURE;
        }
    if((n=recv(socketSiteHtml,buffer,sizeof(buffer),0))<0){
        perror("recv()");
        return EXIT_FAILURE;
        }    
    else printf("%s \n",buffer);
    close(socketSiteHtml);
return 0;
}