Peer-to-peer networking means networking where, in contrast to the client-server paradigm, each node is both a "client" and a "server". That is, each peer can provide "services" to other peers on the networks. Many peer-to-peer schemes are thought of as a meta-network running on top of an existing network (such as the Internet).
One difficulty that peer-to-peer networks try to solve is dealing with situations that arise when nodes are intermittently available, or when nodes disappear and reappear at different locations on the underlying network. For example, many PCs on the internet have dynamic IP addresses. This can make it difficult for these PCs to run servers (or, rather, they can run a server but no one will be able to access the server if the IP address of the server changes faster than the DNS system can propagate the change).
There are many application-specific peer-to-peer networks. Examples are GnuTella? (file sharing), FreeNet (file sharing), UseNet (message propagation), ICQ (instant messaging; partially centralized), and various distributed computing systems.
However, perhaps more interesting are the newer application-agnostic peer-to-peer networking systems. These are systems which, like the internet itself, define protocols for peers to network together, but allow those peers to make use of the network for arbitrary applications.
JXTA is a featureful, mature1 system from Sun. It is language-independent (not just for Java, although of course Sun's reference implementation is in Java).
Interestingly, part of the JXTA implementation includes a distributed hash table (DHT), that is, a key-value lookup data structure spread over the entire network in a semi-redundant fashion. Details about how this is done can be found in this readable article.
A lightweight alternative to JXTA is P2PS (peer-to-peer simplified):
http://www.trianacode.org/p2ps/
See also DistributedWiki, MeatBall:PeerToPeer, MeatBall:PeerToPeerWiki
CategoryNetworkingTechnology?
Footnotes:
1. at least, it sounds like it is mature to BayleShanks after a brief web search; it has gone through multiple major revisions and has implementations in a bunch of languages
2. assuming I’m understand it correctly
3. quotation from JXTA Programmer’s Guide