MyFTP
A Python implementation of a FTP client - server. Supports both TCP and UDP protocols. Tested on Python 3.11 and Python 3.10.
Dependencies
Zero. Only python standard libs were used.
Running
Client
You can run python3 src/myftp/client.py --directory <insert valid directory that you have read/write permissions> to start the client.
To run with debug info: python3 src/myftp/client.py --debug 1 --directory <insert valid directory that you have read/write permissions>.
Some example test commands:
get file_server.txtsummary numbers.txtput file_local.txtput image_local.pngchange file_server.txt file_server1.txthelp
Server
By default, the server IP address or hostname or server name will be 0.0.0.0 or localhost (meaning it will bind to all interfaces). The --port_number flag, if not specified will be by default 12000.
You can run python3 src/myftp/server.py --directory <insert valid directory that you have read/write permissions> to start the server.
Or run python3 src/myftp/server.py --ip_addr <insert ip addr of the server> --port_number <insert port number here> --debug 1 --directory <insert valid directory that you have read/write permissions> for debugging purposes.
Localhost testing
Checkout this repo, go the root of the repo.
Client
Run python3 src/myftp/client.py --debug 1 --directory client_directory
Server
Run python3 src/myftp/server.py --debug 1 --directory server_directory
Testing with Docker
Dependencies
dockerdocker-composemake
Setup
git clone https://github.com/minhtrannhat/MyFTP.git project- Make you are at the root of this repo.
- Build the system with
make build. - Wait 10 seconds.
- 2 containers will be created on the same network
mynetwork. Their respective IP addresses will be printed to stdout. - Open two terminal windows: one for each of server and client.
- Run the server with
make serverin a terminal. - Run the client with
make clientin a terminal. - For the client, when asked to put in the ip address and port number of the server, you can put in
ftp_server 12000or adjust to your chosen port number. The IP address is resolved by Docker so ftp_server can not be changed. - Go into the
clientdocker container withmake docker-client. The folder in which FTP is using to host client files is located at/client_directory/ - Or go into the
serverdocker container withmake docker-server. The folder in which FTP is using to host server files is located at/server_directory/ - Tear down everything with
make clean.
Fast setup
- Require
tmuxinatorandtmux. - Type
tmuxinator start .at the root of this repo.