The idea is to provide a basic understanding of socket programming in python and analyzing the throughput achieved by differnet types of implementations. I have implemented variants of file transfer in terms of concurrency and algorithms. These variants are listed as follows:
- Based on type of connection:
- TCP
- UDP
- Based on Algorithms:
- Nagle's Algorithm
- Delayed ACK
- Based on Concurrency:
- concurrent server using Fork
- concurrent server using threads
- Based on Consistency:
- Persistent TCP connection
- Non-persistent TCP connection
Serial number | Novel Name | File named as at server side | Size (MB) |
---|---|---|---|
1. | Sherlock Holmes | sherlock.txt | 3.9 |
2. | War and Peace | warpeace.txt | 3.4 |
3. | Jane Eyre | janeeyre.txt | 3.2 |
4. | Middlemarch | middlemarch.txt | 1.8 |
5. | Romeo and Juliet | romeo.txt | 1.5 |
-
Analyzing the algorithms
- move into the folder tcp_algorithms
- run server using
python3 server.py
and enter the port number - run client in another terminal using
python3 client.py
- enter the port number of the server
- follow the instructions to enable or disable the algorithms
- user can ask for only one file at a time
-
Concurrency - fork
- move into the folder tcp_fork
- run the server using
python3 fork_server.py
- run client in another terminal using
python3 fork_client.py
- ask the files in spave separated fashion like
sherlock.txt warpeace.txt
- the client side will connect with the server individually for each file (running the all the clients simultaneously)
-
Concurrency - threads
- move into the folder tcp_thread
- run the server using
python3 thread_server.py
- run client in another terminal using
python3 thread_client.py
- ask the files in spave separated fashion like
sherlock.txt warpeace.txt
- the client side will connect with the server individually for each file (running the all the clients simultaneously)
-
Non persistent TCP
- move into the folder tcp_non_persistent
- run the server using
python3 nonp_server.py
- run client in another terminal using
python3 nonp_client.py
- ask the files in spave separated fashion like
sherlock.txt warpeace.txt
- one by one file transfer (each creating a new tcp connection)
In UDP, persistent and non-persistent remains same because there is no particular handshake in UDP which initiates the connection.