Very basic networking in Java
Why define PORT as a constant independently in TextReceiver and TextSender? Isn't it the whole point that it's one and the same value? Let's stick to Single Source of Truth then. And if not, why make them public?
I'm not sure if this is necessary:

if (in != null) {
    close(in, clientSocket, serverSocket);
} else if (clientSocket != null) {
    close(clientSocket, serverSocket);
} else if (serverSocket != null) {
    close(serverSocket);
}


I'd rather have close skip over null values when iterating through closeables.
It could be a better choice to use a finally clause for closing resources (in TextReceiver). It executes regardless of whether there was an exception or not.
If we're logging all other exceptions, I can't see the reason not to log the IOException in close.