Bonjour,
Après des efforts j'ai réalisé une petite application Client/Server qui sert à
transférer plusieurs fichiers du client vers le serveur. Ca marche impeccable,
mais pas toujours. Parfois le client ne reçoit pas le fichier complet !
Si jenlève le Sleep(2000) alors un client sur le réseau
et pas sur le même PC ne reçoit pas les memes bytes qu'il doit recevoir ... ou es le probleme dans mon code ?
----- Code Serveur -----
//variables globales
Char FICHIERS[100][50] ; // tableau des noms des
fichiers
int N ;//nombre des fichiers à transmettre en entier
Char N2[3] ; //nombre des fichiers à transmettre en
char
int TailleFichier;//taille du fichier en entier
char T[10];//taille du fichier en char
Char *buffichier; // buffer memoire, va contenir le fichier
FILE *fich; // Pointeur fichier Source
/* fonction qui lit le continue dun répertoire et remplit
un tableau nommé char FICHIERS par les noms des fichiers, et une variable N par
le nombre des fichiers. */
ReadDirectory("C:\\Dev-Cpp\\txt\\");
//Envoi du nombre de fichiers ...
sprintf(N2,"%d",N);//Conversion de type
if (send(sock2,N2,sizeof(N2),0) < 0) Erreur("Erreur
Transmission du Serveur") ;
int i=0 ;
while (i < N)
{
//Envoi le nom du fichier
if (send(sock2,fichiers[i],sizeof(fichiers[i]),0) < 0)
Erreur("Erreur Transmission du Serveur !");
if ((buffichier = (char *)malloc(10000)) == NULL)
Erreur("Reservation Memoire Impossible !");
if ((fich = fopen(fichiers[i],"rb")) == NULL)
Erreur("Ouverture Fichier Impossible !");
TailleFichier = fread(buffichier,1,10000,fich); // Lecture
dans buffichier
sprintf(T,"%d",TailleFichier);//conversion du int
en char
//Envoi de la taille du fichier
if (send(sock2,T,sizeof(T),0) < 0) Erreur("3:Erreur
Transmission du Serveur !");
i++ ;//incrementation du conteur
Sleep(2000);
if (send(sock2,buffichier,TailleFichier,0) < 0)
Erreur("Erreur Transmission du Serveur !");
_fcloseall();//
Fermeture Fichier
free(buffichier);//
Libère mémoire
}
----- Code Client -----
//reception du nombre de fichiers
recv(sock,N2,sizeof(N2),0);
N = atoi(N2); //conversion du char en integer
while (i++ < N)
{
//reception du nom
du fichier
char nomfichier[50];
recv(sock, nomfichier,sizeof(nomfichier),0);
if ((fich = fopen(nomfichier,"wb"))
== NULL) Erreur("Ouverture Fichier Impossible !");
//reception de la taille du fichier
recv(sock,T,sizeof(T),0);
TailleFichier = atoi(T) ; //conversion du char en
integer
if ((buffichier = (char *)malloc(TailleFichier)) == NULL)
Erreur("Reservation Memoire Impossible !");
//reception du fichier
int receved ;
if ((receved = recv(sock,buffichier, TailleFichier,0)) <
0) Erreur("Erreur Reception du Serveur !");
if(receved !=
TailleFichier)
{
printf("%d != %d", buffichier, TailleFichier);
Erreur("Erreur Lors du transfert !");
}
fwrite(buffichier,1, TailleFichier,fich);// Ecriture dans FICHIER
free(buffichier);//
Libère mémoire
_fcloseall();//
Fermeture Fichier
}
closesocket(sock);// Fermeture Socket
WSACleanup();//
LIBERATION DLL WINSOCK