|

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 |
|