ciao..
Ho un problema con un programma che ho scritto per copiarmi i file da tra due computer messi in rete!

i file vengono letti bene, ma ricevutti male : riceve sempre un paio di byte in piu , è questo impedisce il corretto funzionamento del file....


il sorgente è abbastanza lungo quindi posto solo il sorgente delle due funzioni che gestiscono il trasferimento:

codice:

void lettura_file ( FILE * file, char *nome_file) {

WSADATA data; 
int size, err;
char buf[MAX_FILE], ip[32], c_size ;
SOCKET sock;
SOCKADDR_IN sock_in;


    err = WSAStartup(MAKEWORD(2,2), &data); 

    if ( err == SOCKET_ERROR) 
        printf("Libreria non inizializzata, ERRORE : %d\n", WSAGetLastError()); 

    sock = socket(AF_INET, SOCK_STREAM, 0); 

    if ( sock == INVALID_SOCKET) 
        printf ("Socket non creato corretamente, ERRORE %d", WSAGetLastError()); 

        sock_in.sin_family = AF_INET; 
        sock_in.sin_port = htons(222);

    printf("Inserisci indirizzo ip :"); 
    scanf("%s", ip); 
   // printf(ip);
         sock_in.sin_addr.S_un.S_addr = inet_addr(ip); 

    err = connect(sock, (SOCKADDR *)&sock_in, sizeof(sock_in)); 

    if ( err == SOCKET_ERROR) 
        printf("Connessione non avenuta, ERRORE : %d", WSAGetLastError());
    else 
        printf("Connessione avenuta\n"); 
        
        
    size = strlen(nome_file) +1;
    
    c_size = (char ) size;
    
    printf("%c", c_size); 
    
    
    send ( sock, nome_file, size, 0); 
    
    do {
    
    size = fread(buf, 1, MAX_FILE, file);
    
    printf("Dati letti : %d\n", size); 
    
    size = send( sock, buf, size, 0);
    
     printf("Dati inviati : %d\n", size); 
            
   }while(!feof(file)) ; 


   closesocket(sock); 
   WSACleanup(); 


}





void  scrittura_file () {

FILE *file;
WSADATA data; 
SOCKADDR_IN sock_in, s_accept_in;
SOCKET sock, s_accept;
int err, size, size_dati, i, prova; 
char buf[MAX_FILE], nome_file[100];


    err = WSAStartup(MAKEWORD(2,0), &data); 

    if ( err == SOCKET_ERROR)
        printf("Libreria non inizializzata, ERRORE : %d\n", WSAGetLastError()); 
        
    sock = socket(AF_INET, SOCK_STREAM, 0); 
    
    if ( sock == INVALID_SOCKET)
        printf("Socket non creato, ERRORE : %d\n", WSAGetLastError()); 
        
    sock_in.sin_family = AF_INET; 
    sock_in.sin_port =  htons(222); 
    sock_in.sin_addr.S_un.S_addr = INADDR_ANY; 
    
    err = bind( sock, (SOCKADDR *)&sock_in, sizeof(SOCKADDR)); 
    
    if ( err == SOCKET_ERROR) 
        printf("Funzione bind non riuscita, ERRORE : %d\n", WSAGetLastError()); 
    
    err = listen(sock, 1); 
    
                 
                
    if ( err == SOCKET_ERROR) 
        printf("Funzione listen non riuscita, ERRORE : %d\n", WSAGetLastError()); 
    
    size = sizeof(SOCKADDR_IN);
    s_accept = accept(sock, (SOCKADDR *)&s_accept_in, &size); 
    
    if ( s_accept == INVALID_SOCKET) 
        printf("Socket accept non creato, ERRORE : %d\n", WSAGetLastError()); 
    else 
        printf("Sockey connesso, ip : %s\n", inet_ntoa(s_accept_in.sin_addr));
        
    // NON FUNGE
        
    file = fopen("prova_coppia.doc", "wb");
    
    recv(s_accept, nome_file, 100, 0); 
    
    
    printf("Il nome del file e' : %s", nome_file);
        
    
     
    for (;;) {
    
    size_dati = recv(s_accept, buf, MAX_FILE, 0); 
    
    if ( size_dati == SOCKET_ERROR) 
        printf("Funzione recv : %d\n", WSAGetLastError()); 
            
    printf("Dati ricevuti : %d\n", size_dati); 
        
    size_dati =  fwrite(buf, 1, size_dati, file);  
    
    printf("Dati scritti : %d\n", size_dati);
    
    prova = feof(file);
    
    printf(" EOF presente : %d\n",prova);  
    
    prova = ferror(file); 
    
    printf(" ERRORE presente : %d\n", prova); 
    
    
    if (  size_dati != 100) 
    break;
    
    
    
    
    }
     
        
}
grazie....