DSRG | Interests | Projects | Publications | Laboratories | Local info | People 
Distributed Systems Research Group

Gniazda TCP, UDP

Celem ćwiczenia jest omówienie zagadnień związanych z programowaniem gniazd TCP i UDP w systemiach UNIX. Bazą dla ich przedstawienia będą programy napisane w jęz. C i Java. Szczególny nacisk zostanie położony na przedstawienie problemów komunikacyjnych istniejących na styku różnych platform sprzętowych, systemowych i programowych.

Laboratorium zakłada podstawową znajomość tematyki programowania gniazd.

Materiały do ćwiczenia:

  • W.R. Stevens, Programowanie zastosowań sieciowych w systemie Unix, rozdz. Gniazda BSD.
  • JavaTM 2 Platform, API Specification, a w szczególności klasy:
    • Socket,
    • ServerSocket,
    • InetAddress,
    • MulticastSocket,
    • DatagramSocket,
    • DatagramPacket.

Zadanie domowe:

Zadanie: 1
Tytuł: Rozgłaszanie informacji przy użyciu multicastu

Treść: Zadanie polega na napisaniu klienta (jęz. C/C++) oraz serwera (jez.
Java), którzy będą wymieniali między sobą dane przy wykorzystaniu mechanizmu
rozgłaszania grupowego IP (multicast IP). W systemie uruchomionych ma zostać
wielu klientów - nadawców wiadomości oraz wiele serwerów - odbiorców
wiadomości. Klient i serwer jako argumenty wejściowe powinny przyjmować adres
transportowy (tj. adres IP i numer portu) klient dodatkowo powininen przyjmować
identyfikator wiadomości do przesłania. Przykładowe wywołania mogą wyglądać
następująco:

serwer 239.0.0.0/2000
klient lilac.ics.agh.edu.pl/2000 A

Identyfikator wiadomości przekazywany w argumencie wywołania programu klienta
powinien odnosić się do określonych (na stałe) w kodzie klienta wartości
opisanych typem zdefiniowanym poniższą gramatyką:

<typ_wiadomości> ::= <typ_prosty> | <typ_złożony>

<typ_prosty>     ::= <typ_całkowity> | <typ_łańuchowy> | <typ_boolean>

<typ_złożony>    ::= "struct {" <typ_wiadomości>* "}"

<typ_całkowity>  ::= //wybrany 32 bitowy typ całkowity

<typ_łańcuchowy> ::= //łańcuch znaków w wybranym przez siebie
//kodowaniu np. ASCII, UTF-8 lub UNICODE

Np.
A - int numberOfClients;
B - struct person {
      char * nick;
      int age;
      boolean hacker;
    }
C - struct party{
      struct date {
        int day;
        int month;
        int year;
      };
      boolean gotDrunk;
      char * description;
    }
itd.
Proszę zdefiniować co najmniej 3 typy proste i 3 złożone.

Serwer powinien umieć odbierać i wypisywać na ekran dowolne wiadomości opisane
powyższą gramatyką i nie powinien być w żaden sposób zależny od klienta.

Zadanie 2:
Tytuł: Rozgłaszanie wiadomości w oparciu o centralną usługę EventService

Treść: W oparciu o serializację i deserializację wiadomości opracowaną w
zadaniu 1 należy przygotować niezawodne rozsyłanie wiadomości od nadawców do
obiorców poprzez centralną usługę EventService. Usługa ta (jez. Java) powinna
odbierać od odbiorców (jez. C - Sparc) żadania zapisu na wybrany temat
(określany typem wiadomości) z jednej strony. Z drugiej zaś powinna
przekazywać przesłane przez nadawców (jez. C - Intel) wiadomości do wszystkich
zainteresowanych odbiorców.

Nie ma wymagania, aby odbiorca i nadawca byli zintegrowani w jednym
programie. Należy natomiast zapewnić, aby poszczególne kanały
komunikacyjne obsługiwane były niezależnie od siebie tak, aby w razie
wystąpienia problemów z komunikacją z jednym z klientów pozostali byli
obsługiwani bez przeszkód.

Należy zapewnić możliwość zgłaszania się nowych odbiorców i nadawców
wiadomości oraz rezygnacji istniejących.

Materiały dodatkowe:

Zagadnienia do kolokwium:

  • Materiał zawarty w powyższych dokumentach
  • Sekwencja wywołań po stronie klienta i serwera (tryb połączeniowy i bezpołączeniowy)
  • Przeznaczenie portów efemerycznych(dynamicznych), dobrze znanych i zarejestrowanych
  • Semantyka funkcji socket(), bind(), accept(), listen(), connect(), close(), shutdown(), read(), write(), sendto(), recvfrom(), send(), recv()
  • Znaczenie opcji SO_REUSEADDR, SO_KEEPALIVE, SO_SNDBUF, SO_RCVBUF, TCP_NODELAY
  • Konstruktory klasy java.net.Socket, java.net.ServerSocket w kontekście protokołu TCP
  • Konstruktory kalsy java.net.DatagramSocket, java.net.MulticastSocket
  • Ogólna charakterystyka transmisji z wykorzystaniem protokołów TCP i UDP
    • nawiązanie i zamykanie połączenia
    • niezawodność transferu danych
    • typowe przejścia maszyny stanów TCP
  • Zalety i wady wykorzystania gniazd do komunikacji w systemach rozproszonych

| powrót | Ćwiczenie następne |

-->