Bonjour,
Je dois écrire un client HTTP en utilisant les sockets et les appels systèmes Unix.
J'ai bien démarrer, mais je me retrouve devant un problème de lecture des données.
Voici le code et quelques explications ensuite :
Le souci est qu'il bloque sur le read sans rien faire et sans rien afficher. Je dois zapper quelque chose car j'ai fais pas mal de recherche sans succès...
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 int s = socket(AF_INET, SOCK_STREAM, 0); struct hostent *host = gethostbyname("www.perdu.com"); struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(80); address.sin_addr.s_addr = *(long *) host->h_addr_list[0]; if (connect(s, (struct sockaddr*)&address, sizeof(address)) < 0) { perror("Socket connection"); exit(2); } // Send HTTP Query char *httpQuery = "GET /index.html http/1.1 \nHOST: www.perdu.com \n\n"; if (write(s, httpQuery, sizeof(httpQuery)/*, 0*/) < 0) { perror("HTTP Query"); exit(3); } printf("query sent : \n%s \n", httpQuery); // Read content int l; char buffer[50]; l = read(s, buffer, sizeof(buffer)/*, 0*/); printf("received = %s \n", buffer);
J'ai également testé avec les fonctions send() et recv() en mettant l'argument flags à 0.
Do you have any idea ?
Merci !
Ju
Partager