JXTA - это фреймворк, который может сделать это для вас. Я написал книгу под названием Practical JXTA, которая доступна для чтения онлайн на Scribd. Он содержит полные примеры кода. Вы хотите работать с выпуском 2.6 или 2.7.
Если вы не хотите использовать платформу, ваш центральный узел должен быть в состоянии прочитать NAT-адрес ваших удаленных пограничных узлов, когда они подключаются к нему (см. Socket#getRemoteSocketAddress()
). Но это не поможет с TCP (чтобы было проще). Если вы используете UDP, то у вас есть шанс, потому что, как только дыра UDP пробита в NAT, многие узлы могут (обычно) подключиться к нему.