[socket] reception des données.
Bonjour, depuis quelques temps, je veux réaliser un client en C pour me familiariser avec les sockets.
J'ai un problème au niveau de la reception des données en provenance du server. En effet je veux récupérer 600 caractères, mais j'en lis seulement 4..
Voila le code source :
Code:
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
| #include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
void Die(char *mess) { perror(mess); exit(1); }
int main (int argc, char *argv[]) {
int sock;
struct sockaddr_in echoserver;
int i, control;
char cChar;
char * ligne;
if (argc != 4) {
fprintf(stderr, "USAGE: ./programme <server_ip> <message_a_envoye> <port>\n");
exit(1);
}
/* Initialisation de la socket */
if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
Die("Impossible de d'initialiser la socket..");
}
/* Construction de la structure */
memset(&echoserver, 0, sizeof(echoserver)); /* On nettoie la structure */
echoserver.sin_family = AF_INET; /* Internet/IP */
echoserver.sin_addr.s_addr = inet_addr(argv[1]); /* adresse ip du serveur */
echoserver.sin_port = htons(atoi(argv[3])); /* le port de connexion */
/* On etablit la connection */
if (connect(sock,(struct sockaddr *) &echoserver, sizeof(echoserver)) < 0) {
Die("Impossible de se connecter au server..");
} printf("Connecte... Envoi requete...");
send(sock, "GET / HTTP/1.0\n\n", 16, 0);
/* Lecture de ce que nous envoi le server */
ligne = malloc(600);
control = read(sock, ligne, sizeof(ligne));
ligne[control] = 0;
printf(" control : %d \n %s \n",control,ligne);
return 0;
} |
Quand je teste mon programme avec par exemple :
./programme ip_de_google test 80 . Je recois seulement "HTTP".
Voila, j'ai testé avec la fonction recv(). J'espere que vous pourrez m'éclairer. merci ;)