An implementation of the sliding window protocol as in TCP with supports variable transmission size, delay, and packet loss.
Sliding window protocols are used where reliable in-order delivery of packets is required.
This was one of my first large coding projects, so forgive my poor coding practices.