- Overview
- Key Features
- Dependencies
- Cloning the Repository
- Compiling and Running
- Group's Report
- Conclusion
- Developed by
This project was developed as part of the Comunicações por Computador
course, which is a subject offered in the third year, first semester of the Software Engineering Degree at the University Of Minho.
The project focuses on implementing a peer-to-peer file sharing service, utilizing both TCP and UDP protocols. It involves designing and implementing custom protocols for efficient communication between network elements, including a centralized tracker server and multiple file-sharing nodes. Additionally, the project integrates DNS platforms to enhance system functionality.
For further information about the project, including detailed design considerations, protocol specifications, implementation details, and test results, refer to the project report.
Here are the key features of the project:
-
Peer-to-Peer File Sharing:
The project implements a peer-to-peer file sharing system, allowing users to share files directly between their devices without relying on a central server. -
Utilization of TCP and UDP Protocols:
Custom protocols based on TCP and UDP were developed specifically for this project. TCP is used for reliable communication between nodes and the tracker server, while UDP is employed for efficient file transfer between nodes. -
Chunk-based File Transfer:
Files are divided into chunks to enable parallel downloading from multiple nodes, improving download speeds and overall system performance. -
Custom Communication Protocols:
Custom communication protocols were designed to facilitate efficient and secure communication between nodes and the tracker server, ensuring reliable file sharing and tracking. -
Dynamic Node Discovery:
The system utilizes dynamic node discovery techniques to efficiently locate nodes that possess specific file chunks, enabling faster file downloads and improved system scalability. -
Integration with DNS Platforms:
The project has been adapted to integrate with DNS platforms, enhancing system accessibility and reliability by utilizing domain names instead of direct IP addresses.
-
Python:
The project is written in Python, so you need to have Python installed on your system to run the code. You can download Python from the official Python website. -
Python Libraries/Modules:
Certain functionalities of the project may rely on specific Python libraries or modules. You can install these dependencies using thepip
package manager. For example, to install a library namedexample_lib
, you can use the following command:
pip install example_lib
Please refer to the project documentation or source code for more information on required dependencies.
To clone the repository, run the following command in your terminal:
$ git clone https://github.com/JoaoCoelho2003/CC.git
Once cloned, navigate to the repository directory using the cd command:
$ cd CC
Before running the tracker and node components, it's essential to understand their roles in the system:
The tracker serves as a central server responsible for managing connections and coordinating file sharing among nodes in the network. It maintains information about available files and their respective nodes.
A node represents a client in the peer-to-peer network. Each node can act as both a client and a server, allowing it to request files from other nodes and share its own files.
To ensure proper functionality of the program, it's necessary to have the DNS (Domain Name System) running. The DNS resolves hostnames to IP addresses, facilitating communication between the tracker and nodes.
Now, follow the instructions below to compile and run the tracker and node components.
To run the tracker component, follow these steps:
- Start Tracker: Execute the
FS_tracker.py
script using Python 3 to start the tracker server.
$ python3 FS_tracker.py <port>
Replace <port>
with the port number on which you want the tracker to listen for connections.
To run the node component, follow these steps:
- Start Node: Execute the
FS_node.py
script using Python 3 to start the node server and connect to the tracker.
$ python3 FS_node.py <path> <host> <port>
Replace <path>
with the path to the folder containing files to be shared, <host>
with the hostname or IP address of the tracker server, and <port>
with the port number on which the tracker server is listening.
These instructions provide guidance on running both the tracker and node components using Python 3. No executable files are created; the Python scripts are executed directly using the Python interpreter.
The group has prepared a comprehensive report detailing the design decisions, implementation strategies, and evaluation outcomes of the peer-to-peer file sharing system. In the report, every aspect of the project, including architecture, protocols, implementation details, and test results, is thoroughly explained.
For a deeper understanding of the project's intricacies and rationale behind various design choices, please refer to the group's report.
Exploring the intricacies of peer-to-peer file sharing within the domain of distributed systems and cloud computing has been an enlightening and fulfilling experience. Throughout this project, we've delved into the nuances of custom protocol design, network communication optimization, and system scalability, gaining invaluable insights into the challenges and opportunities inherent in building such systems.
If you have any inquiries, recommendations, or feedback regarding our project, please don't hesitate to reach out. Your insights are crucial as we strive for continual improvement and innovation in our work. Happy coding!
A100596 João Coelho
A100692 José Rodrigues
A100750 Duarte Araújo