Skip to content

Prosta wymiana czasu

REUSEADDR

Wyłączanie mechanizmu blokującego powtórne użycie tego samego portu:

    socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

Prosty serwer plików

Wersja TCP

Klient przesyła na serwer ścieżkę do pliku, który chce pobrać z dodatkowym bajtem \0x00 na końcu. Serwer w odpowiedzi przesyła całą zawartość pliku i kończy połączenie.

Kod serwera realizującego ten protokół:

Wersja UDP

Klient przesyła na serwer wiadomości, na które serwer odpowiada. Dozowolone wiadomości:

  • Pobranie informacji o ścieżce:
    • Należy wysłać wiadomość z następującą zawartością:
      • Identyfikator transakcji na 8 bajtach (dowolna liczba),
      • Zero na 8 bajtach,
      • Długość ścieżki na 2 bajtach,
      • Ścieżka.
    • Odpowiedź składa się z:
      • Identyfikator transakcji na 8 bajtach (skopiowany z zapytania),
      • Zero na 8 bajtach,
      • Liczba fragmentów na które ścieżka jest podzielona na 8 bajtach.
  • Pobranie pojedynczego fragmentu:
    • Należy wysłać wiadomość z następującą zawartością:
      • Identyfikator transakcji na 8 bajtach (dowolna liczba),
      • Numer fragmentu na 8 bajtach (fragmenty są numerowane od 1 do liczby fragmentów włącznie),
      • Długość ścieżki na 2 bajtach,
      • Ścieżka.
    • Odpowiedź składa się z:
      • Identyfikator transakcji na 8 bajtach (skopiowany z zapytania),
      • Numer fragmentu na 8 bajtach (skopiowany z zapytania),
      • Fragment (bajty z odpowiedniego fragmentu pliku).

Kod serwera realizującego ten protokół:

Dostępne pliki

Na serwerze (zarówno w wersji TCP, jak i UDP) uruchomionym pod adresem serwer.sieci.tcs.ovh:4567 są dostępne następujące pliki:

-rw-r--r-- 1 root root 16777216 Nov 21 09:47 16M
-rw-r--r-- 1 root root     1024 Nov 21 09:47 1K
-rw-r--r-- 1 root root  1048576 Nov 21 09:47 1M