Teseted and finished ProtocolSocket. There is a potential issue with ProtocolSocket. It does as it is supposed to do, but the specifications could lack the necessarry robustness to successfully deal with how the protocols deal with each other. The issue lies when two sockets send messages at the same time and both protocols expect a specific message in return (as opposed to just letting the socket handle getting messages). Both will instead receive the sent message and need to decide how to deal with this  unexpected message. If they start processing the message, they could potentially do the same thing again. There are ways to get around this but they would go against specification. If we're lucky, none of the protocols will need to wait on a specific message after sending a message