Utilizing framing
So far, we are sending structs over TCP and separating these messages with a new line. Essentially, this is the most basic form of framing. However, there are some drawbacks. We must remember to put in a delimiter such as a new line; otherwise, our program will hang indefinitely. We also run the risk of prematurely splitting the message into two messages by having a delimiter in the data of the message. For instance, when we split our messages up with the new line delimiter, it is not inconceivable to have a chunk of text in a message that has new lines or any special character or byte to denote the need to separate the stream into serializable packages. To prevent such issues, we can use the built-in framing support that Tokio provides.
In this section, we will be rewriting the client and server as the sending and receiving of messages will change. If we try and insert our new approach into existing code of the client, it can easily lead to confusion. Before we...