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.pyand 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.