Project 1: “Accio” File using TCP
- Revisions
- Overview
- Tasks Description
- Environment Setup
- Set Up Vagrant and Create VM Instance
- Notes
- General Submission Requirements
- General Grading Policy
- Late Submission Policy
- Overall Grading Hint
- Deductions
Revisions
Not yet
Overview
In this project, you will need to implement a simple client-server application that transfers a file over a TCP connection. The project is split into 3 parts that need to be submitted independently before the corresponding deadlines. All submissions should be done on Gradescope where your submission will be automatically checked. You are allowed to resubmit any number of times. For full credit, you must pass all automated tests.
All implementations should be written in Python BSD sockets. No high-level network-layer abstractions (especially, sendall
function) are allowed in this project. You are allowed to use some high-level abstractions for parts that are not directly related to networking, such as string parsing, multi-threading.
The objective of this project is to learn basic operations of BSD sockets, understand implications of using the API, as well as to discover common pitfalls when working with network operations.
You are required to use git
to track the progress of your work. The project can receive a full grade only if the submission includes git history no shorter than 3 commits. You should not commit any temporary files in your repository, otherwise points will be deducted.
Note: You are encouraged to host your code in private repositories on GitHub. At the same time, you are PROHIBITED to make your code for the class project public during the class or any time after the class. If you do so, you will be violating academic honestly policy that you have signed, as well as the student code of conduct and be subject to serious sanctions.
DO NOT open files in “text” mode. All the code you write should directly work with buffer and buffer strings like b"foobar-I-am-a-buffer-string"
. Nowhere in your program you should use .decode('utf-8')
or .encode('utf-8')
. If you do, you probably not going to pass many of the tests
Tasks Description
The project is split into three progressive parts with their individual deadlines:
- Part 1: Accio Client
- Part 2: Accio Server Simplified
- Part 3: Accio Server
Environment Setup
To successfully finish the project you can use any platform that can run Python3. However, as a general practice and ability to test your implementation under emulated network conditions, it is highly recommended that you use the provided Ubuntu 18.04 based environment.
You can easily create an image in your favourite virtualization engine (e.g., VirtualBox) using the Vagrant platform and steps outlined below.
Set Up Vagrant and Create VM Instance
Note that all example commands are executed on the host machine (your laptop), e.g., in Terminal.app
(or iTerm2.app
) on macOS, cmd
in Windows, and console
or xterm
on Linux. After the last step (vagrant ssh
) you will get inside the virtual machine and can compile your code there.
If you are using non-Intel Macbooks, then you may need to opt for alternative virtualization systems, as VirtualBox is known not to work there.
- Download and install your favourite virtualization engine, e.g., VirtualBox
- Download and install Vagrant tools for your platform
- Set up project and VM instance
- Clone project template
git clone https://github.com/aa-fiu-classes/cnt4713-project1 ~/cnt4713-proj1 cd ~/cnt4713-proj1
- Initialize VM
vagrant up
Do not start VM instance manually from VirtualBox GUI, otherwise you may have various problems (connection error, connection timeout, missing packages, etc.)
- To establish an SSH session to the created VM, run
vagrant ssh
If you are using Putty on Windows platform,
vagrant ssh
will return information regarding the IP address and the port to connect to your virtual machine. - Clone project template
- Work on your project
All files in
~/cnt4713-proj1
folder on the host machine will be automatically synchronized with/vagrant
folder on the virtual machine. For example, to compile your code, you can run the following commands:vagrant ssh cd /vagrant make
Notes
- If you want to open another SSH session, just open another terminal and run
vagrant ssh
(or create a new Putty session). - If you are using Windows, read this article to help yourself set up the environment.
- You are now free to add more files to make the
server.py
andclient.py
full-fledged implementation.
General Submission Requirements
Submissions for three parts of the project must be cumulative, e.g., part 2 should include everything from part 1 and part 3 should include everything from parts 1 and 2.
To submit your project:
- Create a
README.md
file placed in your code that includes:- The problems you ran into and how you solved the problems (this can be cumulative across the submission, i.e., you add more as you proceed with parts)
- Acknowledgement of any online tutorials or code example (except class website) you have been using.
- Submit to Gradescope via connection to Github. Your repository should include all your source code (
client.py
,server-s.py
,server.py
, and any other Python files you have created) andREADME.md
. Make sure you do NOT include temporary files (deductions will be made if so).
Before submission, please make sure the client and server conforms to the specification and you did not implement what implementation does not require.
Submissions that do not follow these requirements will not get any credit.
General Grading Policy
Your code will be first checked by a software plagiarism detecting tool. If we find any plagiarism, you will not get any credit.
Your code will then be automatically tested in some testing scenarios.
Note that your implementation will be tested against a reference implementation. Projects receive full credit if only all these checks are passed.
Late Submission Policy
Part 1 and Part 2 can be submitted up until deadline for the Part 3. However, if Part 1 and/or Part 2 are submitted after Part 1 and Part 2 deadlines, the corresponding grade is subject to 20% penalty.
Overall Grading Hint
- If you see 100% load on your CPU when you running your client/server, it is an indication that something is wrong and test script will legitimately (but randomly) fail.
Deductions
- (-5 pts) The submission contains temporary or other non-source code file, except
README.md
,Vagrantfile
,.gitignore
and other necessary files. - (-5 pts) The submission does not contain README.md with the required content.