At first glance, I'd say the problem lies within this code-snippet of the EchoHandler class (in the run method):
This code states that when the input is empty (null), the client is done, and should stop the while loop and proceed (closing the connection with the client). That's not what you need. The loop has to continue untill the client disconnects (or send a terminator message), but when the client doesn't send anything, the loop should still be in place.