Powrót na stronę UNIX

Tematyka zadania: gniazda lokalne
Rodzaj sprawdzania: na zajęciach
Czas pisania: 70 minut
Sprawdzający: Marcin Borkowski i Przemysław Dobrowolski
Autor Zadania: Jan Stępień

Klient sieć MiNIBitTorrent na gniazdach lokalnych. Istnieją trzy typy programów: klient, tracker oraz peer. Klient podłącza się do trackera i wysyła ciąg 5 bajtów "peers". W odpowiedzi otrzymuje dane o peerach, które aktualnie udostępniają fragmenty pewnego pliku, w następującej postaci:

Przykładwa odpowiedź od trackera:


  Byte   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16
  Value  0  15   7  'g' 'n' 'i' 'a' 'z' 'd' 'o'  6  's' 'o' 'c' 'k' 'e' 't'

Każdy z peerów nasłuchuje na swoim gnieździe. Gdy podłączy się do niego klient, peer czeka na dwubajtową liczbę opisującą numer kawałka, który chce otrzymać klient a następnie wysyła mu dany kawałek. Celem klienta jest pobranie wszystkich elementów pliku udostępnianego przez peery i zapisanie w pliku wyjściowym.

Celem zadania jest napisanie klienta i tylko klienta. Binarna wersja pozostałych 2 programów wraz z plikiem do testów będzie dostępna chwilę po rozpoczęciu zajęć w katalogu /home2/samba/borkowskim/unix/.

Mimo że komunikacja między procesami odbywa się na gniazdach lokalnych, peer oraz tracker wysyłają i odbierają liczby dłuższe od 1 bajta kodowane w network byte order.

Klient przyjmuje dwa parametry: nazwę gniazda trackera oraz nazwę pliku do którego zostaną zapisane dane odebrane przez peerów. Przy wywołaniu z błędną liczbą argumentów program powinien się zakończyć z kodem błędu wypisując USAGE.

Klient powinien równomiernie wykorzystać gniazda peerów pobierając fragment od każdego z nich.

Tracker nie zwróci więcej niż 10 nazw socketów peerów. Plik będzie podzielony na 16 kawałków po 64B każdy.

Powrót na stronę UNIX