File-sharing applications are one of the best-known niches of peer-to-peer programming. In this chapter, you've learned that the greatest challenge with a peer-to-peer file sharer may not be networking, but using threads to handle the application's many responsibilities.
FileSwapper is only one example of a simple client, but it provides a solid, extensible framework that you can use when designing your own resource-sharing peer-to-peer applications. However, there are still a number of additional challenges to face, including firewalls and other network-connectivity issues (the bane of any peer-to-peer application), and security. We'll consider some of these issues in the following chapters.