Below is the basic protocol of the server and client. See the code for a working
example of what I have tried to define here.

1. The socket uses Visual Basic WinSock control to send and recieve data.
2. Each send and recieve is an entire set of commands, they are never split.
3. Commands are terminated with a CR and LF
4. The messages sent are of the format: COMMAND [ARGS]...
5. Command and arguements are separated by spaces
6. Passwords cannot contain spaces
7. Commands accepted by the server:

	LOGIN <username> <password>
	REGISTER <username> <password>
	LOGOUT
	REQUEST_ADDRESS <username to get address of>

8. Commands sent by the sever:

	COMMAND_UNKNOWN
	INVALID_LOGIN_REQUEST
	LOGIN_ACCEPTED
	INVALID_EMAIL_OR_PASSWORD
	INVALID_REGISTER_REQUEST
	LOGIN_ALREADY_EXISTS
	REGISTER_SUCCESSFULL
	INVALID_LOGOUT_REQUEST
	LOGGED_OUT
	INVALID_ADDRESS_REQUEST
	NOT_REGISTERED
	OFFLINE
	ADDRESS <username of user to get address of> <address>

9. You must have performed a LOGIN or REGISTER command before LOGOUT and REQUEST_ADDRESS can be performed.
   otherwise you'll get a COMMAND_UNKNOWN back.

10. Sockets are kept open all the time they are connected - when they disconnect the socket is closed and
    thier state is updated.