[HELP!!!]Funzioni per mandare e ricevere file su socket tcp

di il
5 risposte

[HELP!!!]Funzioni per mandare e ricevere file su socket tcp

Ciao a tutti!! Volevo creare delle semplici funzioni da utillizare per mandare e siceve file su socket tcp,
utilizzando la read e la write ma ho qualke problemino...qualkuno sa dove sbaglio?

int sendFile(char *fileToSend, int socket)
{
    int nread, nwrite, fdfile, sendedByte = 0, dim =0;
    char ack[DIM_ACK];
    char sendBuffer[DIM_BUFF];

    fdfile = open(fileToSend, O_RDONLY);
    if( fdfile < 0)
    {
       printf("\nAttenzione problemi con l'apertura del file: --%s--\n", fileToSend); 
       close(fdfile);
       return ERROR;
    }
    

    printf("\nInizio invio file(%s)...\n", fileToSend);
    nwrite = write(socket, fileToSend, sizeof(fileToSend));//mando nome al ricevente
    if(nwrite < 0)
    {
        printf("\nImpossimile mandare il file: --%s--\n",fileToSend);
        close(fdfile);
        return ERROR;
    }


    while ((nread = read(fdfile, sendBuffer, DIM_BUFF)) > 0)
    {
       
        
        nwrite = write(socket, sendBuffer, nread);
        printf("BUFFER:%s|||\n", sendBuffer);
        sendedByte += nwrite;
        if(nwrite < 0)
        {
  
          close(fdfile);
          return ERROR;
        }
                   
   }//while 
close(fdfile);
return SUCCESS;
}//FINE SENDFILE
La funzione per ricevere -- il nome del file viene letto all'esterno e passato come parametro

//funzione per ricevere un file da un Server
int rcvFile( char * fileToRcv, int socket)
{
     int nread, nwrite, fdfile, rcvByte = 0, dim =0;
     char ack[DIM_ACK];
     char rcvBuffer[DIM_BUFF];
     

     fdfile = open(fileToRcv, O_WRONLY|O_CREAT|O_TRUNC, 0600);
     if( fdfile < 0)
     {
       printf("\nAttenzione problemi con la creazione del file: --%s--\n", fileToRcv); 
       close(fdfile);
       return ERROR;
     }

     printf("\nInizio ricezione file(%s)...\n", fileToRcv);

     while ((nread = read(socket, rcvBuffer, DIM_BUFF) ) > 0)
     {

        printf("BUFFER:%s|||\n", rcvBuffer);
        nwrite = write(fdfile, rcvBuffer, nread);
        rcvByte += nwrite;
        if(nwrite < 0)
        {
          printf("\nAttenzione problemi di scrittura sul file(%s)", fileToRcv);
          close(fdfile);
          return ERROR;
        }
                   
      }//while 
    

close(fdfile);
return SUCCESS;
}//FILE RCVFILE

ricevo qualcosa ma praticamente mi crea invece di un unico file ...tanti file che hanno come nome le righe del file ricevute!!!!:P


Grazie in anticipo per la risposta!

5 Risposte

  • Re: [HELP!!!]Funzioni per mandare e ricevere file su socket tcp

    Compila questo tools (un po' datato ma comodo)

    Esegui da terminale:
    
     nc <host> -p <numeroporta>
    
    fai partire il tuo programma di scrittura sullo stesso host/porta e osserva
  • Re: [HELP!!!]Funzioni per mandare e ricevere file su socket tcp

    L'unica cosa e' che io carico sia il client che il server su uno stesso pc ehehehe:P
    va bene lo stesso?

    ho provato a far partire tutto ma non succede nulla...misa ce sbaglio qualkosina !
  • Re: [HELP!!!]Funzioni per mandare e ricevere file su socket tcp

    l'unica cosa e' che io carico sia il client che il server su uno stesso pc ehehehe:P
    va bene lo stesso?
    Certo, esistono degli indirizzi riservati al loopback proprio per questo scopo. Gli indirizzi riferiti alla propria macchina sono in IPV4: 127.0.0.0/8 (subnet 255.0.0.0). Quasi sempre viene definito 'localhost' uguale a 127.0.0.1, puoi verificare:
    
    cat /etc/hosts | grep localhost
    127.0.0.1       localhost 
    ::1             localhost ipv6-localhost ipv6-loopback
    
    per cui, supponiamo che il tuo server/client utilizzino la porta 20000, eseguiamo sulla prima console:
    
    nc -l -p 20000 localhost
    
    Mentre la console rimane in 'listening', apri un'altra console, verifica se con telnet puoi scrivere:
    
    telnet localhost 20000
    Trying ::1...
    telnet: connect to address ::1: Connection refused
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    
    PROVA PROVA
    
    Vedrai PROVA PROVA sulla prima console

    Ora che conosci il gioco, tieni in 'listen' netcat ed esegui il tuo client (quello con la sendFile).

    Buon debug
  • Re: [HELP!!!]Funzioni per mandare e ricevere file su socket tcp

    Scusatemi, ma non riesco più a smetter di ridere per questa chicca trovata su wiki:
    Una leggenda metropolitana riguardante 127.0.0.1 circola frequentemente nei forum tecnici del web e del computer. La leggenda, probabilmente a fini didattici, vuole che un fantomatico personaggio riferito frequentemente al "peggiore Hacker del mondo" abbia assaltato il suo stesso PC utilizzando come indirizzo IP proprio 127.0.0.1, ignaro che fosse riferito alla propria macchina. Si racconta che l'hacker usasse come userID "bitchchecker".
    http://web.archive.org/web/20080319112747/http://www.electric-escape.net/node/1475
  • Re: [HELP!!!]Funzioni per mandare e ricevere file su socket tcp

    Ok!! vedo se riesco! thx per la disponibilita'......ehehehehe con questo mi ci diverto proprio visto che sono 3 giorni che cerco di far quadrare le cose ad occhio...e stavo impazzendo:P




    ps: Ahhaahahaha..effettivamente e' divertente!!!
Devi accedere o registrarti per scrivere nel forum
5 risposte