Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Inviare files

  1. #1

    [C] Inviare files

    Ciao!
    Vorrei scrivere un programma in C che consenta di inviare un file di qualunque tipo dal client al server. Come posso fare?

  2. #2
    Il primo passo è la creazione del protocollo tramite il quale intendi trasmettere i dati, o l'implementazione di un client e di un server conformi ad un protocollo già esistente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Meglio la seconda.
    Che protocollo mi conviene usare per una trasmissione rapida e sicura?

  4. #4
    TFTP non è particolarmente sicuro (non supporta autenticazione e cifratura, ma forse tu per "sicuro" intendevi qualcos'altro), ma è molto semplice e piuttosto veloce (non è compresso, ma invia pochissimi dati oltre agli effettivi dati del file).
    ---EDIT---
    Ma forse se vuoi "spedire" dei dati più che prelevarli ti conviene usare qualche altro protocollo più semplice ancora, puoi anche semplicemente inventarlo tu.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    come faccio ad inventarmi un protocollo?

  6. #6
    Scrivendone le specifiche ed implementandolo. Un protocollo ad esempio può essere del tipo:
    1. il server resta in ascolto su una determinata porta;
    2. il client si connette alla porta e invia un qualche messaggio di "saluto" convenzionale, eventualmente seguito dalla versione del client e attende la risposta del server;
    3. il server risponde in maniera analoga, magari dicendo anch'esso la sua versione;
    4. (opzionale) il client comunica che ha intenzione di inviare un file e attende una risposta;
    5. (opzionale) il server conferma che è in grado di effettuare l'operazione;
    6. il client comunica il nome del file che intende inviare e attende una risposta;
    7. il server conferma che ha ricevuto il nome;
    8. il client comunica le dimensioni del file e attende una risposta;
    9. il server conferma che ha ricevuto le dimensioni del file;
    10. il client invia tutto il file;
    11. il server quando è arrivato tutto il file comunica che ha ricevuto il file e chiude la connessione.

    Supponendo di realizzare un protocollo "human readable", con ritorni a capo come separatori richiesta-risposta, un esempio di "conversazione" può essere questa (in rosso il client, in verde il server):
    codice:
    HELLO NomeClient 0.4.2.71
    HELLO NomeServer 0.3.6.12
    SENDFILE
    OK
    NomeFile.txt
    OK
    14
    OK
    Hello World![NUL] (qui come NUL intendo ovviamente il carattere 0, situato al termine di ogni file ASCII)
    OK
    .
    Sarebbe anche buona cosa implementare un sistema di messaggi di errore:
    codice:
    asdasdasdas
    ERROR 1 Invalid handshake
    codice:
    HELLO NomeClient 0.4.2.71
    HELLO NomeServer 0.3.6.12
    asdasdsad
    ERROR 2 Invalid command
    codice:
    HELLO NomeClient 0.4.2.71
    HELLO NomeServer 0.3.6.12
    SENDFILE
    OK
    Noe?|*asde.tx\\t
    ERROR 3 Invalid filename
    codice:
    HELLO NomeClient 0.4.2.71
    HELLO NomeServer 0.3.6.12
    SENDFILE
    OK
    NomeFile.txt
    OK
    asgaegasagae
    ERROR 4 Invalid file size
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.