a network protocol specification, a client program that implements the client side of the protocol, and a server program that implements the server side of the protocol. As beginners in network programming, most students tend to overlook the importance of correct protocol design and specification. They often write a "protocol" after they have written up the client and the server programs. This is akin to building a palace without an architectural plan and then drawing up a blue print after the palace is already erected (or more likely after the palace is crumbled).