Envoyer un fichier de plusieurs lignes via socket
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:
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:
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