In this paper we analyze the functional and non-functional requirements of peer-to-peer (P2P) systems that go beyond the needs of the well explored file-sharing P2P systems. Four basic subcategories are suggested to classify the non-functional requirements: adaptability, efficiency, validity and trust. Similarly, the functional requirements are divided into user-triggered and system-triggered functions. Then, we present and discuss several existing solutions following different design approaches in order to reveal their suitability for different types of P2P applications. More particularly, we capture the characteristics of structured and unstructured overlay networks. For the structured solutions, we investigate distributed hash tables and lexicographic graph based solutions. For the unstructured approaches, we discuss both hierarchical and non-hierarchical overlay networks and emphasize on small-world and power-law networks. Finally, we provide a set of demanding application classes such as voice over IP and massive multiplayer online games that may be benefited by utilizing the P2P technology.