Before this semester, I always thought I knew enough about networking and that taking the networking class would just bore me with details of various internet protocols. But, networking is a cornerstone of modern Computer Science and my peers who had taken the class had no negative feedback so I decided to brave my way through the class in hopes of expanding my understanding of networking. As the semester is almost over and I have just completed our final project I have realized how wrong I was. My previous experience with the Java Sockets API didn’t quite prepare me for what was going on under the hood. The C Sockets API is much less forgiving as are all things in C. I now have a much stronger grasp on the mechanics of networking and I know the details of all the modern networking protocols.
The final project for Networking I taught by Mostafa Ammar and Russell Clark involved designing and implementing a protocol for reliable file transfer over UDP sockets in C. I implemented the Go-Back-N ARQ protocol on top of UDP to provide reliability. Other than this my protocol is relatively straightforward. I created two separate applications, a client and a server. My implementation only supports one way transfer from the client to the server and only supports one client at a time. The minute details are available in the README in the below archive of the source. The code was developed on and should compile on standard Linux machines.