IMO the most widely used multiuser app. Two basic approaches
Centralized (Napster/AG-style) - central server(s) keeps index
of all users' files ("who has what"). Search on central server. File download is peer-to-peer.
Decentralized (Gnutella-style) - each user is both a client and a server
("servent") connected to neighbours and so on. Searches are passed from neighbour-to-neighbour.
When a file found it is directly downloaded from provider similar to the Centralized style.