In questo articolo, implementiamo un noto protocollo nelle reti di computer chiamato File Transfer Protocol (FTP) utilizzando Python. Usiamo il TCP Socket per questo, cioè un socket orientato alla connessione. FTP (File Transfer Protocol) è un protocollo di rete per la trasmissione di file tra computer tramite connessioni TCP/IP (Transmission Control Protocol/Internet Protocol). FTP è comunemente usato per trasferire file dietro le quinte per altre applicazioni, come servizi bancari.
TCP-SERVER.py: implementazione lato server
Iniziamo importando la libreria dei socket e creando un semplice socket. AF_INET si riferisce alla famiglia di indirizzi ipv4. IL SOCK_STREAM significa protocollo TCP orientato alla connessione. Successivamente, leghiamo l’indirizzo host e il numero di porta al server.
L’utente inserisce il file numero massimo di connessioni client richieste. Sulla base dell’input, determiniamo la dimensione di un array che memorizza i client chiamati Connessioni. Il server continua quindi ad ascoltare le connessioni client e, se le trova, le aggiunge all’array Connections. Lo fa fino a quando l’array Connections raggiunge il suo limite massimo. Quindi, per ogni connessione, inizia l’elaborazione,
- I dati vengono ricevuti e quindi decodificati.
- Se i dati non sono nulli, il server crea un file con il nome “Output.txt” e lo scrive al suo interno.
- Questo viene continuato finché tutti i dati non vengono scritti nel file
- Quanto sopra accade per tutti i client e quindi le connessioni vengono chiuse. Quindi, siamo in grado di ricevere un nuovo file alla fine del server con gli stessi identici dati.
Python3
|
TCP-CLIENT.py: implementazione lato client
Per prima cosa creiamo un socket per un client e lo colleghiamo al server utilizzando la tupla contenente l’indirizzo host e il numero di porta. Quindi, l’utente inserisce il nome del file che desidera inviare al server. Dopo questo, utilizzando il funzione open() di Python, vengono letti i dati del file. I dati vengono letti riga per riga e quindi codificati in binario e inviati al server utilizzando socket.send(). Al termine dell’invio dei dati, il file viene chiuso. Continua a chiedere un nome file all’utente fino a quando la connessione client non viene terminata.
Python3
|
Produzione:
Per prima cosa eseguiamo il server usando il comando.
python tcp-server.py
Successivamente, specifichiamo il numero massimo di connessioni client possibili (diciamo 2).
- Le connessioni dei client vengono inizializzate, ad esempio, l’array Connections viene generato con dimensione 2 per memorizzare i client.
- Successivamente, creiamo un nuovo terminale ed eseguiamo il nostro client utilizzando il comando.
python tcp-client.py
Il numero massimo di schede in cui possiamo eseguire il comando nel terminale sarà 2. Poiché stiamo inizializzando il nostro client con questo. Quindi creiamo due client Client 1 e Client 2.
Una volta eseguito il client, viene visualizzato un output “Connesso con il cliente 1” sul lato server, che indica che la connessione è stata completata con successo con il primo client. Lo stesso vale anche per il secondo cliente.
Successivamente, lato client, diamo il nome del file che vogliamo inviare. Qui file1.txt viene inviato da entrambi i client. Il contenuto di file1.txt è mostrato di seguito:
Si noti che sul lato client, continuiamo a mostrare il prompt: “Inserisci il nome del file che vuoi inviare:” in modo che un client possa inviare più file. Una volta interrotta la connessione con il client, utilizzando “Control+C” nel terminale, viene generato un nuovo file con il nome Output.txt lato server con lo stesso contenuto e la connessione viene chiusa. Qui, il file Client 1 è memorizzato come Output0.txt, e il file Client 2 viene memorizzato come Uscita1.txt.