Вы не можете гарантировать бесплатные номера портов. Вам нужно будет сканировать порты на машине в поисках свободных портов где-нибудь между 1024 и 65535. Если вы хотите создать клиентский сокет, вам нужно будет попытаться соединиться с каждым локальным портом, который вы хотите, в последовательности, прервав и снова запустив, если вы встретить используемый порт - но, конечно, это может продолжаться, если другое приложение пытается захватить порты тоже. Для сокета сервера вы должны попытаться выполнить привязку к каждому порту по порядку.
Для клиентского сокета необходимо указать локальный порт? Если нет, просто выделите количество соединений, которые вы хотите. Что касается сокета сервера, я бы просто предположил, что мне принадлежат все порты, скажем, от 10000 до 10100. Хотя запуск сотен серверов, вероятно, не то, что вы хотите.
В любой сети на Java вместо использования пакета Java .net лучше использовать Netty , с которой гораздо проще работать.