Powrót na stronę UNIX

Zgadywanka

Napisz aplikację typu klient-serwer, która pozwoli na przeprowadzenie rozgrywki wielu klientów z serwerem na raz. Gra polega na tym, że serwer ustala pewną losową liczbę z zakresu <1, 1000> a zadaniem podłączonych graczy jest odgadnięcie tej liczby. Gracze udzielają odpowiedzi równocześnie a nie w ustalonej odgórnie kolejności. Serwer weryfikuje strzał gracza informując go, czy dana liczba jest zbyt mała, zbyt duża czy prawidłowa. Gdy któryś z graczy odgadnie szukaną liczbę prawidłowo gra się kończy.

Serwer oczekuje na m klientów a następnie rozpoczyna rozgrywkę informując o tym wszystkich graczy. Jeżeli któryś z klientów rozłączy się przed rozpoczęciem gry serwer nadal czeka, aż podłączy się wystarczająca ilość graczy. Jeżeli klient rozłączy się podczas gry, gra zostaje zakończona. Zakończenie rozgrywki zawsze oznacza rozłączenie wszystkich graczy i oczekiwanie na m nowych klientów. W okresie rekrutacji serwer ignoruje (ale nie blokuje) dane wysyłane przez klientów a w czasie gry ignoruje (ale nie odrzuca) nadchodzące połączenia.

Komunikacja między klientami a serwerem ma się odbywać tylko przy użyciu pojedynczych zmiennych typu short. Używanie tablic oraz dynamiczna alokacja pamięci są zabronione (wyjątkiem jest bufor na dane pobierane przez klienta z konsoli). Serwer jest programem jednoprocesowym. Należy zaprojektować taki system komunikacji, by klient mógł rozpoznać powód przerwania rozgrywki:

klient informuje użytkownika o przyczynie zakończenia gry stosowną informacją na ekranie.

Zarówno klient jak i serwer reagują na SIGINT kończąc działanie. Parametr m > 1 i port są argumentami wywołania programu serwera, host i port są argumentami wywołania programu klienta. Gdy zostaną podane nieprawidłowe argumenty wywołania programu, aplikacja wypisuje USAGE i kończy działanie.

Zadanie będzie sprawdzane przez Jurka Bartuszka. Rozwiązanie proszę wgrać do katalogu /home/samba/bartuszekj/unix/ .


Szczególną uwagę zwracamy na:
Powrót na stronę UNIX