This is a project from an optional module during my second year of a games development degree. The goal of the project was to create a messaging application that could run on a local network as well as a graphical application that could run on the same systems.
Separate projects were created within the solution for the server, clients and packets. The packets project was very simple. It had an abstract class for a base packet type which was inherited from for different types of packet, and an enum to define the different types of packet. Each type of packet has its own class as the data that will need to be sent will be different depending on the packet type. The basic types include things like chat messages and server messages which each just required a string that contained the message while the base class would store the packet type. In hindsight, for simple messages, it may have been better to have a simple message class that you could pass in the message and packet type to as this would reduce the overall number of classes, alternatively, a simple message class could be created and additional message classes could inherit from this class to add any additional data.
Overall this project taught me a lot about the basics of networking and how you need to think differently when producing applications that communicate over a network.