I'd use RMI. You will have one extra server, the directory service. This uses a UnicastRemoteObject subclass that implements your custom interface (which in turn extends Remote). Each chat server will become a client of this service.
An example on how the remote interface could look like:
This of course assumes that the ChatServer class is Serializable. It probably isn't (because of the sockets it uses), so you will need some little container class which does and holds the information on each chat server: name, host, port, etc. If you only need the host and port you could use InetSocketAddress for this.