Bonjour,

J'écris actuellement un programme me permettant d'envoyer le contenu d'un fichier par sockets C. Je précise que ce fichier comporte plusieurs lignes. Mon programme fonctionne correctement, mais il n’envoie que la dernière ligne du fichier !

Le code est le suivant:

Client

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
59
60
61
62
63
64
65
66
 
#include <sys/types.h> //différentes librairies
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <string.h> /* memset() */ 
#include <sys/time.h> /* select() */ 
#define TAILLE_MAX 1000
 
#define REMOTE_SERVER_PORT 50000 //on utilise ici le port 50000
 
int main(void) 
{ 
   //déclaration des variables
   char *buffer; 
   int sock, rc, i; 
   struct sockaddr_in cliAddr, ServAddr; 
   int taille = 100; 
 
FILE* fichier = NULL;
    char chaine[TAILLE_MAX] = "";
 
    fichier = fopen("plop.txt", "r");
 
printf("Données envoyées:");
 
    if (fichier != NULL)
    {
        while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
        {
 
	printf("%s", chaine); // On affiche la chaîne qu'on vient de lire
        }
         fclose(fichier);
    }
 
 
   //initialisation du buffer
buffer = (char *) malloc(sizeof(char) * taille); 
buffer = "ça marche !!!!!!"; //message envoyé au serveur
 
printf("les données ont été envoyées\n"); //simple texte pour la lisibilité du programme
 
   //initialisation de la socket
   ServAddr.sin_family = AF_INET; 
   ServAddr.sin_port = htons(REMOTE_SERVER_PORT); 
   ServAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
 
   //création de la socket
   sock = socket(AF_INET,SOCK_DGRAM,0); 
 
   //initialisation de la socket
   cliAddr.sin_family = AF_INET; 
   cliAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
   cliAddr.sin_port = htons(0); 
 
   rc = bind(sock, (struct sockaddr *) &cliAddr, sizeof(cliAddr)); //bind
 
   //envoi du message
   rc=sendto(sock ,chaine, taille, 0, (struct sockaddr *)&ServAddr, sizeof(ServAddr)); 
 
   return 1; 
}
Serveur

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
 
#include <sys/types.h> //différentes librairies
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
#include <stdio.h> 
#include <unistd.h> /* close() */ 
#include <string.h> /* memset() */ 
 
#define LOCAL_SERVER_PORT 50000 //on utilise ici le port 50000
 
int main(void) 
{ 
   //déclaration des variables
   int sock, rc, n, cliLen; 
   struct sockaddr_in cliAddr, servAddr; 
   char msg[1000]; 
 
   //création de la socket
   sock=socket(AF_INET, SOCK_DGRAM, 0); 
 
   //initialisation de la socket
   servAddr.sin_family = AF_INET; 
   servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
   servAddr.sin_port = htons(LOCAL_SERVER_PORT); 
   rc = bind (sock, (struct sockaddr *) &servAddr,sizeof(servAddr)); 
 
   //création d'une boucle infinie
   while(1) 
	{    
	//initialisation du buffer
	memset(msg,0x0,100); 
 
    //pour la réception du message
    cliLen = sizeof(cliAddr); 
    n = recvfrom(sock, msg, 100, 0, (struct sockaddr *) &cliAddr, &cliLen); 
 
    //affichage du message reçu
    printf("Message recu : \n");
    printf("%s \n",msg); 
 
    }//fin de la boucle infinie
 
return 0; 
}
Que dois-je changer pour envoyer TOUTES les lignes de mon fichier au serveur ?
Merci par avance.
Simon