...The multi-threading part aims to show how to avoid blocking methods by putting them in separate thread, therefor, the ExecutorService was not used. Two Runnable interfaces are available in the server and the client to show how the dialog is managed.
The Socket part aims to show how simple communication using TCP/IP are quite simple. The system shows how to exchange and process String over network. This is not sufficient when talking about large applications, but, let's not forget that HTTP uses Strings.
The project contains both the Server and the Client. ...