Zadanie 2
---------

Należy przy pomocy technik RPC utworzyć trzy programy - klienta i serwera 
symulujące przesyłanie danych w sieci za pomocą protokołu UDP oraz program
kończący symulację. Dodatkowo należy napisać skrypt lub program 
przeprowadzający symulację.

Program 1: Serwer
-----------------

Program serwera ma symulować działanie sieci. Programy klientów będą
łączyły się z serwerem za pomocą protokołu RPC i przekazywały mu
datagramy pseudo-UDP (w postaci odpowiednio sformatowanych struktur 
opisujących pełny nagłówek datagramu IP połączonego z datagramem UDP). 
Serwer będzie w losowy sposób
- opóźniał datagram,
- zmieniał jego kolejność względną w stosunku do innych datagramów,
- gubił datagram
(prawdopodobieństwo zdarzenia opóźnienia oraz częstość gubienia
datagramów mają być podawane w parametrach wywołania programu
serwera). Serwer na podstawie danych z nagłówka UDP (adresu i numeru 
portu) będzie przekazywał do odpowiedniego klienta przesłany mu
datagram. Jeśli przesłanie nie będzie możliwe, musi wygenerować
komunikat ICMP - odbiorca nieosiągalny i wysłać go do komputera, który
nadał początkowy datagram UDP.

Każdy klient będzie musiał przed rozpoczęciem komunikacji zarejestrować
swój adres IP oraz numer portu w serwerze.

Serwer udostępnia za odpowiednim wywołaniem listę wszystkich zarejestrowanych
u niego adresów IP wraz z portami.

Serwer implementuje także procedurę RPC kończącą jego pracę. Procedura 
ta jest wywoływana przez program kończący symulację. Procedura ta
przed zakończeniem programu serwera wypisuje na ekran
- liczbę otrzymanych datagramów UDP,
- liczbę wysłanych datagramów UDP,
- liczbę wysłanych datagramów ICMP.


Program 2: Klient
-----------------

Program klienta po uruchomieniu losuje swój adres IP oraz numer portu
(adres IP musi byc w zakresie adresów klasy A, B lub C). Rejestruje się
u serwera, po czym w losowych odstępach czasu pobiera listę dostępnych
klientów od serwera, losuje jednego z nich i wysyła do niego za pomocą
datagramów pseudo-UDP obsługiwanych przez serwer pod wskazany (w wierszu 
wywołania klienta) plik. Plik musi być podzielony na odpowiednie kawałki
mieszczące się w pojedynczym datagramie UDP. Klient może wylosować także
odbiorcę spoza listy - jednak zdarzenie to musi być równie prawdopodobne
jak zdarzenie wylosowania każdego innego odbiorcy.
 
Po wykonaniu określonej (z wiersza wywołania) liczby rund klient kończy
działanie i podaje statystyki: ile otrzymał datagramów UDP, ile ICMP,
ile wysłał datagramów UDP.

Program 3: Program kończący symulację
-------------------------------------

Program wysyła do serwera żądanie wywołania procedury kończącej symulację.


Program/skrypt wykonujący symulację
-----------------------------------

Program ten ma uruchomić z odpowiednimi parametrami serwera, następnie
uruchomić z odpowiednimi parametrami 100 klientów, poczekać aż
wszyscy klienci zakończą pracę, a następnie wywołać program kończący
symulację.

Termin: 7.04.2004
Ostatnia modyfikacja: 05.03.2004

Valid HTML 4.01!