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),
      • Zero na 8 bajtach,
      • Fragment (bajty z odpwoiedniego fragmentu pliku).

Kod serwera realizującego ten protokół: