[C]socket : transfert d'image, video, pdf etc

Fermé
Utilisateur anonyme - Modifié par nagashima le 1/04/2010 à 11:26
 Utilisateur anonyme - 1 avril 2010 à 15:32
salut a tous !

voila, j'ai un soucis en c :
je souhaite transmettre des fichier via socket pour un p2p. le probleme est que le transfert se passe mal sans que je comprenne ... voila mon code :

STRUCTURE COMMUNE :
typedef struct 
{ 
    char Buffer[500]; 
    int finFich; 
}sFich; 


COTE SERVEUR
void RecevoirFich(SOCKET sock , char * Trame) 
{ 
    char tmpNom[499]; 
    char tst; 
    int sortie = 0; 
    int lngRcv; 
    int i = 0 , j = 1; 
    for(i,j; Trame[j] != '\0';i++,j++) 
        tmpNom[i] = Trame[j]; 
    tmpNom[i] = '\0'; 
    printf("3 - reception fichier : %s\n",tmpNom); 
    FILE * Fich = fopen(tmpNom,"wb"); 

    sFich buff; 
    buff.finFich = 0; 

    if(Fich != NULL ) 
    { 
        while( buff.finFich == 0) 
        { 
            recv(sock, &buff, sizeof( buff ) , 0); 
            fwrite(buff.Buffer , 1 , strlen(buff.Buffer)*sizeof(char) , Fich); 
        } 
        fclose(Fich); 
    } 
}


COTE CLIENT :
void envoyerFichier(SOCKET sock,char * Buff) 
{ 
    char NomFichier[499]; 
    char buff[500] ; 
    sFich buffer; 
    buffer.finFich = 0; 
    int i = 0 , j = 1; 
    for(i,j; Buff[j] != '\0';i++,j++) 
        NomFichier[i] = Buff[j]; 
    sendBuff(sock , Buff); 
    FILE* fichier =fopen(NomFichier , "rb"); 
 

    if ( fichier != NULL) // ce test échoue si le fichier n'est pas ouvert 
    { 
        while (buffer.finFich == 0) 
        { 
            if( fread( buffer.Buffer , sizeof(char) , 500 , fichier ) <= 0) 
                buffer.finFich = 1; 
            send(sock, &buffer, sizeof(buffer), 0); 
            printf("%s\n" , buffer.Buffer); 
            memset(buffer.Buffer,'\0',(500-1)); 
        } 
        printf("envoi %s fini \n", NomFichier); 
        fclose(fichier); 

    } 
    else 
        printf("erreur ouverture fichier\n"); 
}



je signale juste que le transfert de fichier txt marche trés bien ...

merci d'avance !

1 réponse

Utilisateur anonyme
1 avril 2010 à 15:32
toujours mettre 500car dans le fichier plutot que le strlen

++ all
0