A dissertation presented on distributed Peer-to-Peer (P2P) Internet applications, focusing on distributed resource sharing as a P2P application. The history of Internet applications is researched to point out the roots of P2P applications as well as the dependency between modern technology and legacy technology. P2P applications are compared with traditional client/server applications. A classification system for categorizing P2P applications according to functionality and computing model is devised. The classification system is used to group applications with similar attributes and behavior. Five main mechanisms utilized by all content sharing P2P applications are identified. These mechanisms are node discovery, content discovery, content retrieval, content publishing and content storage. Napster, Gnutella and Freenet are discussed in detail as examples of distributed P2P resource sharing applications which utilize these mechanisms. These applications are then compared to point out similarities and differences. Other P2P initiatives known to the author are briefly presented. Challenges that need to be overcome if P2Papplications are to be widely adopted are identified and discussed. A typical content sharing P2P application is implemented for constraint mobile devices such as cell phones. The unique characteristics, possibilities and challenges of P2P on mobile devices are explored.