Сама реализация требует лишь понимания основ сетевого программирования(socket,bind,listen,connect java.net.*). А подводный камень весьма огромен. Клиенты в отличии от серверов как правило не имеют глобально-маршрутизируемых адресов(белых) или они закрыты фаерволом. Есть костыли вроде UPNP и NATPNP, но работают они далеко не всегда. Так же есть техника STUN(за счёт неё работает например torrent-utp), но и она будет работать всё реже и реже и в мобильных сетях не работает вообще(как в прочем и UPNP с NATPNP). С IPv6 отдельная головная боль, ведь тот адрес, с которого клиент подключился к серверу, может в скором времени стать недействительным. А неизменный адрес лучше не светить в интернете без разрешения пользователя.
Итого, такая архитектура может работать только в локальных сетях, так как современный Web очень не любит p2p.