Sieci Komputerowe
Transkrypt
Sieci Komputerowe
Sieci Komputerowe Zestaw VIII 11 I 2008 1. sumator Napisać jedno-procesowy pozornie współbieżny serwer połączeniowy (protokół TCP). Serwer ma pełnić rolę sumatora. Klient wysyła do serwera napis reprezentujący liczbę naturalną. Serwer dodaje zaś tą liczbę do indywidualnego licznika i wysyła wiadomość zwrotną z aktualną wartością licznika. Początkowo licznik jest wyzerowany dla każdego nowego klienta (gniazda). Serwer powinien nasłuchiwać na porcie o numerze powyżej 1024. Należy: (a) Stworzyć gniazdo (socket). (b) Powiązać gniazdo z wybranym portem (bind). (c) Ustawić nasłuch nadchodzących połączeń (listen) (d) Wyzerować zbiór aktywnych deskryptorów (fd_set afds;, FD_ZERO(&afds)) (e) Dodać gniazdo serwera (zwrócony przez funkcję socket) do zbioru aktywnych deskryptorów (FD_SET(&afds)) (f) Ustawić minimalną (mins) i maksymalną (maxs) wartość używanych deskryptorów równą gniazdu serwera. (g) Wypisać na konsole informacje o Uruchomieniu serwera, numerze portu, etc. (h) Następnie w pętli należy: i. Przekopiować zawartość afds do innej zmiennej typu fd_set (np. rfds) ii. Czekać, aż będzie możliwość odczytu (bez blokowania) z któregoś z deskryptorów select(maxs+1, &rfds, NULL, NULL, NULL); iii. Sprawdzić, który deskryptor jest gotowy do odczytu (FD_ISSET). Należy przejrzeć cały zakres deskryptorów od minimalnego (mins) do maksymalnego (maxs) iv. Jeżeli deskryptorem gotowym do odczytu jest gniazdo serwera, należy otworzyć nowe połączenie (accept) i dodać nowe gniazdo do zbioru aktywnych deskryptorów (FD_SET). Zaktualizować mins i maxs. v. W przeciwnym razie należy odczytać wiadomość. Zaktualizować licznik (element tablicy indeksowany wartością gniazda klienta). Wysłać wartość licznika z powrotem do klienta. vi. Serwer ma wypisywać na konsole informacje o adresie ip i porcie nadawcy(użyć funkcji getpeername), treści i wartości wiadomości, wartości licznika. Dla każdej użytej funkcji systemowej/bibliotecznej należy obsłużyć możliwe błędy. Napisać odpowiedniego klienta dla tej usługi. Andrzej Görlich [email protected] http://th.if.uj.edu.pl/˜atg/SK