Кто-то должен где-то прослушивать соединение. Стандартное соединение Socket подключается к хосту и порту, на котором находится активный прослушиватель (ServerSocket для стандартного сокета Java). По умолчанию ServerSocket блокирует ожидание входящих соединений.
Если вы добавите соединение ServerSocket на обоих клиентах, вы захотите, чтобы один поток прослушивал подключения, а другой пытался установить исходящие подключения. Есть несколько альтернатив, таких как использование NIO, которые позволят вам проверять входящее и исходящее соединение, не блокируя все приложение.
Вы также можете взглянуть на вещание, однако с этим решением также есть сложности.
Еще одна мысль: в зависимости от ваших требований вы всегда можете изучить возможности использования P2P-сред, таких как JXTA.