I presume you understand that bit.
We connect to a Socket and maintain a list of clients' Streams and there is a Reader which reads from the Socket. I would have preferred those fields to have private access.
There is an inner class which is a Runnable. You start a
Thread and the ClientHandler will listen continuously for any messages coing from the Socket.
The constructor creates the BufferedReader, which listens to whichever Socket it is passed
The run() method has a loop; as long as anything is coming through the socket, it takes it, prints it on the terminal, and passes it to the tellEveryone method
Start the go() method
Creates a server socket listening on port 5000. Whenever anybody tried to connect to 5000, it accepts them, and creates a PrintWriter which writes a
String to that person's Socket. It starts the ClientHandler, which is on a different page, listening.
Goes through the list of writers connected to each Socket and passes the same message to every one.
There are all sorts of ways that code can be improved. I shall leave that to you.