Bonjour,


Je cherche, à partir d'un programme client écrit en C, à appeler une url php pour que s'exécute sur le serveur des opérations diverses et variées (qui ne posent pas de problèmes).

Bon j'ai réussi après des heures de galère à envoyer une requête plus ou moins correcte à apache et de faire en sorte qu'il réponde aussi.

Donc le script php que j'appelle à partir de mon programme C s'exécute parfaitement, jusque là tout va bien.

Mais la j'ai deux petits hic.
1)
Apache me renvoie un réponse en je ne sais quel chinois que je n'arrive pas à interpréter
2)
mon programme envoie plein de requêtes à la suite mais seule la première est traitée par apache (je vérifie le log access en même temps ).

Voici pour mon code C (dsl il est très sale c'est un test rapide) :
(je l'ai changé pour une version plus propre )

Code C : 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
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
157
158
159
160
161
162
163
164
 
 
/*
Principe :
 
Serveur scrutant des fichiers txt afin d'appeller une URL PHP
par le protocole HTTP, le script PHP s'occupera d'éffectuer l'insertion des données.
 
 
 
 
*/
 
/*
 
                                    MAIN.CCP
                                    fonction principale
 
*/
 
 
/* LIBRAIRIES SOCKET  */
 
//Si nous sommes sous Windows
#if defined (WIN32)
 
#include <winsock2.h>
#include <windows.h>
 
// Sinon, si nous sommes sous Linux
#elif defined (linux)
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
 
// Define et variables nécéssaires en fonction de OS
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close (s)
 
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;
 
#endif
 
// On inclut les fichiers standards
#include <stdio.h>
#include <stdlib.h>
 
#include "http.h"
#include "const.h"
#include "log.h"
 
int main(int argc, char *argv[])
{
 
    write_log_service("Ouverture du service");
 
    // Si la plateforme est Windows
    #if defined (WIN32)
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
    #endif
 
 
 
    /*  VARIABLES    */
    SOCKET sock;                    /* Socket de connexion */
    SOCKADDR_IN sin;                /* Structure configuration socket */
 
    char envoi [200] ={};           /* Requete à envoyer : appel de la page PHP de traitement */
    formatter_requete(envoi,HOST,GET,PAGE_PHP); /* ATTENTION!!! envoi est un pointeur  */
 
    char buffer [1000] = {};        /* Buffer de récupération de la réponse http */
 
 
 
    int i = 1;                      /* compteur : nombre de requetes envoyées */
    int nb_char_sent = 0 ;          /* compteur : nombre de caractères envoyés */
    int nb_char_received = 0 ;          /* compteur : nombre de caractères reçus */
    int is_connected = 0 ;          /* Check si client connecté  */
 
    /* Initialisation socket */
    sock = socket(AF_INET, SOCK_STREAM, 0);
 
    /* Configuration de la connexion */
        sin.sin_addr.s_addr = inet_addr("127.0.0.1");   /* Host */
        sin.sin_family = AF_INET;                       /* Connexion TCP/IP */
        sin.sin_port = htons(80);                       /* PORT 80 */
 
    /* Connexion : 0 si connecté */
        write_log_service("Connexion au serveur ...");
        is_connected = connexion(sock,sin);
 
 
        if (is_connected == 0)                          /* Si connecté */
        {
 
            while (1)                                   /* Boucle service  */
            {
 
                write_log_service("Envoi requete au serveur - Requete : ");     /* Ecriture au journal  */
                write_log_service(envoi);
 
                nb_char_sent = envoyer (sock,envoi );                           /* Envoi de la requete et récupération nombre octets envoyés  */
 
                if (nb_char_sent > 0)                                           /* Si l'envoi est effectué   */
                {
                    write_log_service("Requete envoyee");                       /* Ecriture au journal  */
                }
                else                                                            /* Sinon  */
                {
                    write_log_error("Echec envoi de la requete : ");            /* Ecriture au journal  */
                    write_log_error(envoi);
                }
 
                write_log_service("Attente de la réponse ");                    /* Ecriture au journal  */
 
 
                //nb_char_received = attente_reponse( sock, buffer);              /* Attente de la réponse et récupération nombre octets reçus  */
                nb_char_received = attente_reponse2(sock,buffer, sin);
 
                if (nb_char_received > 0)                                       /* Si réception d'une réponse  */
                {
                    write_log_service("Reponse reçue : ");                      /* Ecriture au journal  */
                    write_log_service(buffer);
                }
                else                                                            /* Sinon   */
                {
                    write_log_service("Pas de réponse ...");                    /* Ecriture au journal  */
                    write_log_error("Aucune réponse reçue ");
                    // refaire ????
                }
 
 
 
                Sleep(1000);                                                    /* Mise en attente   */
                i++;                                                            /* Comptage du nombre de requetes envoyées  */
            }
 
 
 
        }
 
 
 
 
        /* On ferme la socket précédemment ouverte */
        closesocket(sock);
 
 
 
    // Si la plateforme est Windows
    #if defined (WIN32)
        WSACleanup();
    #endif
 
    write_log_service("Fermeture du service");
    return EXIT_SUCCESS;
}

voila en espérant que quelqu'un pourra m'aider , merci d'avance pour vos réponses