Skip to content

Home


ftp-wire-logo

A multi-client FTP system built in Java, supporting file transfers, authentication, and command-based communication between clients and a central server.


Overview

FTP-WIRE was built to be an extensible, effecient and most importantly scalable solution for the file transfering service on a computer machine. it is mainly built of 2 modules: a Client and a Server modules, these modules should be integratable to any other apps in the future which need to use an ftp service (may be not yet acquired, but this is a long term goal).

Many aspects where taken into consideration while designing such software architecture and functions including but not limited to:

  • Effecient CPU utilization in the server module.
  • Usage of many Design Patterns which results a generic code and improve scalability in the future, such as adding new commands or changing a packet contents.

The current project version had been refactored about 2 times before reaching this stage of the developement.

License

The project uses the MIT license .

Features

  • Authentication & Handshaking system
  • Command-based protocol (LIST, RETR, STOR, etc.)
  • Modular structure with Common, Server, and Client packages
  • Multi-client support – handles multiple connections simultaneously.
  • Scalable & High-performance – uses Thread Pool architecture and Non-blocking I/O (NIO).
  • File transfer – clients can download files from the server.
  • Command execution – processes various client commands.
  • Logging & Monitoring system – structured logs via ClientLogger / ServerLogger or debugging, tracking client activity, and monitoring transfers.
  • Error handling & Disconnection discovery – Clean detection of remote disconnections and graceful shutdown/termination logic of client disconnections.
  • Extensible design patterns – leverages reusable patterns for future extensions.

Supported Commands

Command Parameters Description Status
HELP No parameters Lists all supported commands.
QUIT No parameters Terminates the client connection.
RETR file_path file_name Retrieves a file from the server. Optionally rename it by providing file_name.
PWD No parameters Displays the current working directory.
CWD directory_path Changes the current working directory.
NLIST directory_path List all files and folders inside a directory.
STOR file_path file_name Uploads a file to the server. Optionally rename it by providing file_name.

Status indication

Implemented & tested

Planned


Project Core Modules

Package Description
Server Core server logic, client management, and file handling
Client An FTP client which is used to connect and transfer files

See the full Project Structure here


Contributing

Everyone is welcomed to contribute to FTP-WIRE project. Contribution can be techinical such as recommending or implementing a new feature, bugs fixing/discovery, or non-technical such as docs writing and fixing.

Kindly find the full contribution guide here