Powrót na stronę UNIX

Napisz dwa programy pracujące w architekturze klient-serwer poprzez połączenie UDP. Zadanie programu serwera polega na serwowaniu 2 rodzajów komunikatów. Pierwszy z nich to status pliku (czy istnieje i z ilu bloków się składa). Drugi rodzaj komunikatu przesyła zawartość fragmentu pliku (blok). Oba te komunikaty mają być wysyłane w odpowiedzi na żądania przychodzące przez socket.

Zadanie programu klienta polega na pobraniu przez socket pliku od serwera. Ze względu na możliwość utraty danych w transmisji UDP, w razie braku odpowiedzi na któryś z pakietów (timeout 0,5s) należy ponownie wysyłać to żądanie. Pięć kolejnych niepowodzeń należy uznać za zerwanie socketu. Pobierany plik należy wypisać na stdout.

Wszystkie dane poza zawartością pliku i jego nazwa przesyłane między serwerem i klientem mają mieć postać liczb typu int32_t. Należ przyjąć, że rozmiar przesyłanych jednorazowo danych nie może przekroczyć 576B. Jeśli żądany pliki na serwerze nie istnieje (skasowany podczas transmisji) lub blok wykracza poza fizyczny rozmiar pliku, należy takie żądanie zignorować.

Program serwer jako parametr przyjmuje numer portu na którym będzie pracował, program klient przyjmuje jako parametry adres i port serwera oraz nazwę pliku.

  • Zadanie będzie sprawdzane przez Marcina Borkowskiego, należy je wgrać do katalogu /home2/samba/borkowskim/unix/ .


  • Szczególna uwagę zwracamy na:
    Powrót na stronę UNIX