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