The client runs on Android/Linux devices. The thing that makes this setup unique is the way the client finds out about the server. Traditionally, something like zeroconf is used for this purpose. However, zeroconf isn't really suitable when you don't have a name server.
In this setup, there is no central authority. All services advertise themselves by responding to multicast queries on the local network. The client then chooses which service it wants to use. The disadvantage is that, there is no security measures to prevent someone claiming to be someone else. It needs to be implemented after a connection is made, via private/public key pairs etc.
Anyway, here are the downloads: