Dla projektu uniwersyteckiego przeczytaj kilka poradników na temat gniazd. Wierzę, że właśnie tego oczekuje od ciebie twój profesor. Weźmy na przykład następujące: http://www.oracle.com/technetwork/java/socket-140484.html
Istnieją 2 ogólne rozwiązania: serwer pełny i bezserwerowy. W przypadku rozwiązań serwerowych wszyscy klienci powinni mieć wstępnie skonfigurowany adres IP serwera. Serwer otwiera gniazdo serwera i zaczyna nasłuchiwać. Każdy klient łączy się z serwerem i rejestrami. Rejestracja jest bardzo prosta: serwer potrzebuje adresu IP klienta. Teraz serwer przechowuje listę podłączonych klientów i wysyła listę do każdego klienta. Aby utworzyć aplikację peer2peer, każdy klient również otwiera gniazdo serwera. Gdy klient A chce połączyć się z klientem B, po prostu łączy się z gniazdem.
Można wdrożyć rozwiązanie bez serwera. W takim przypadku potrzebny jest mechanizm wykrywania, na przykład w przypadku nadawania.
Mam nadzieję, że to pomoże. Powodzenia.
Proponuję zapoznać się z jedną z wielu implementacji Open Source w zakresie udostępniania plików peer to peer i używać ich jako szablonu (lub po prostu używać ich tak, jak są) –