Made by Nerya Bigon
IRC Group Chat with Reliable UDP File Transfer
In this project we implemented a chat application that consists of:
- Basic messaging and file transfer over TCP.
- Transfer of files over UDP using the RUDP protocol.
- Managing users, files and messaging with Firebase.
- Gui for the client side is made with the Kivy and KivyMD frameworks.
for the reliable UDP I've implemented something close to selective repeat congestion control.
in addition to flow control which is similar to the cubic algorithm.
- Client send file request to the server.
- Three-way handshake is established over UDP.
- Starting with windows size of 3, load the pockets into the window and send them one by one.
- Wait for ACKs.
- The algorithm will resend any pockets that hasn't received an ACK.
- After all the packets in the window received ACK the window's size is increased by two times (slow start) only until reaching half of the last maximal window size.
- Using flow control to increase and decrease the window size in the event of duplicate ACK we decrease the window size by half and continuing sending the packets.
- In the event of a timeout we consider this as very serious event and decrease window size to one, and start a slow start all over again.
//TODO: add a state diagram
Download this repository and follow this steps:
- Make sure that the correct IP addresses are in both the server file and in the client file.
- open a terminal window in the folder with the
server_main.py
file. - run the following command:
python3 server_main.py
- open a second terminal window, in the root folder.
- run the folowing comand:
python3 main.py
- Since we used a database, you first have to register or else you wont be able to login.
- After you successfully lodged in you can send messages freely.
Kivy - see here for installation instructions.
KivyMD - see here for installation instructions.
//TODO: add screenshots of the GUI