• Nie Znaleziono Wyników

Laboratorium z PO - Zestaw 12-WPF

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium z PO - Zestaw 12-WPF"

Copied!
7
0
0

Pełen tekst

(1)

Laboratorium z przedmiotu Programowanie

Laboratorium z przedmiotu Programowanie

obiektowe - zestaw 12

obiektowe - zestaw 12

Cel zajęć. Celem zajęć jest zapoznanie się z tworzeniem aplikacji okienkowych na przykładzie komunikatora testowego, z wykorzystaniem komunikacji sieciowej za pomocą soketów oraz wielowątkowości.

Wstęp.

Klasa Socket dostarcza rozbudowaną funkcjonalność obsługi komunikacji sieciowej. W naszym przypadku skupimy się jedynie na połączeniach TCP.

W przypadku TCP jeden soket (np. na komputerze o IP 10.0.0.1) musi zostać uruchomiony w trybie słuchania i zbindowany z otwartym portem. Dla serwerów http domyślnie jest to port 80.

Po tej czynności możemy tworzyć następne sokety również na innych maszynach i łączyć się z tym, który uruchomiony jest w trybie słuchania. (np. na komputerze o IP 10.0.0.2 tworzymy soket, który łączy się z komputerem 10.0.0.1:80). Analogia do przeglądarek internetowych łączących się z serwerem Http.

Klasa Task dostarcza wielowątkowości. Czyli możemy wydzielić część kodu i uruchomić go w tasku, który działa na osobnym wątku. Jest to istotne, gdyż obsługując Sokety wywołujemy na nich metody np. Read(), które blokują wątek w oczekiwaniu na dane id innego klienta. W tym celu metody odczytu uruchomić na osobnym wątku, czyli tasku.

Aby zrealizować zadanie należy wykonać następujące kroki:  Interfejs połączenia klienta

◦ Zdefiniowane delegaty posłużą do rozgłaszania zdarzeń, w tym przypadku będzie to odebranie danych z połączenia oraz utrata połączenia.

◦ Delegatu można przypisać kilka metod, następnie wywołując delegat automatycznie wywołujemy przypisane metody. Można również przypisywać tą samą metodę wielu delegatom.

◦ Metoda SendData przyjmuje dowolny obiekt dziedziczący po Packiet, a implementacja metody będzie mieć za zadanie przesłać obiekt poprzez socket.  Interfejs połączenia serwera (soket słuchający)

◦ Zdefiniowane delegaty posłużą do rozgłaszania przychodzących połączeń z

(2)

Implementacja interfejsu połączenia klienta

◦ Klasa implementuje interfejs IClientConnection.

◦ Dwa konstruktory, pierwszy w celu nawiązania połączenia, drugi w celu

(3)

Metoda Init tworzy obiekt NetworkStream odpowiadający za równoległy zapis i odczyt danych z Socket-u, oraz BinaryFormater który zamieni dowolny obiekt w postać binarną przekaże go do przesłania poprzez strumień.

Metoda Init uruchamia również Task przyjmujący dynamicznie zdefiniowaną metodę, która zostanie uruchomiona w odrębnym wątku. Zadaniem metody jest odbieranie na przychodzących danych, wątek jest blokowany do nadejścia danych, następnie wywoływany jest odpowiedni delegat.

Metod SendData jej zadaniem jest serializacja i przesłanie obiektu. Obiekt ten zostanie odtworzony w Tasku innej połączonej soket-em aplikacji np. na innym komputerze.

Metoda Dispose jest dość istotna pełni funkcję destruktora, której zadaniem jest opróżnić bufor strumienia, a następnie zakończyć połączenie.

(4)

Implementacja interfejsu soket-u nasłuchującego.

Konstruktor konfiturowej soket w trybie nasłuchiwania. Blokuje w ten sposób port w naszym przypadku 9999.

Metoda Listen uruchamia nasłuchiwanie następnie oczekuje na nowe połączenia w osobnym Tasku, gdyż metoda Accept blokuje wątek. Metoda Akccept zwraca soket, który opakowywany jest w klasę ClientConnection i rozgłaszany delegatem.

Przykładowe wiadomości, przesyłane za pomocą klasy ClentConnection

(5)

Przykład użycia klasy nasłuchującej połączenia.

◦ Po utworzeniu obiektu ServerListiner, podłączamy metodę obsługującą przychodzące połączenia pod odpowiedni delegat obiektu.

Ostatecznie rozpoczynamy nasłuchiwanie metodą Listen.

◦ W przypadku prostego komunikatora obsługiwane jest pojedyncze połączenie klienta obiektem IClientConnection.

Po odebraniu połączenia metoda Server_ReciveConnection przypisuje połączeniu odpowiednie metody obsługujące przychodzące dane.

Przykład obsługi przychodzących danych.

IClientConnection wywołując zdarzenie ReciveData przekazuje do metody odebrany obiekt data oraz referencję do samej siebie source.

Na bazie wartości source możemy ustalić, z którego połączenia przyszła wiadomość. Istotne gdy aplikacja obsługuje wiele połączeń naraz i wykorzystuje do wszystkich tą samą metodę Connection_ReciveData.

Sprawdzając, czy obiekt data dziedziczy po wskazanej klasie możemy w prosty sposób rozpoznać jaki typ wiadomości została odebrana.

(6)

Przykład wysyłania wiadomości.

Należy utworzyć dowolny obiekt dziedziczący po Packet w przykładzie to klasa Message. Następnie przekazać ją do metody SendData. Wiadomość zostanie zserializowana, przesłana binarnie przez sieć i odtworzona po drugiej stronie.

Zadanie 1. Proszę zrealizować aplikację, która powinna odznaczać się następującymi cechami:

 Aplikacja ma łączyć się bezpośrednio z inną aplikacją.

 Aplikacja ma nasłuchiwać oraz udostępniać możliwość połączenia poprzez wpisanie adresu IP komputera docelowego. (localhost- doprowadzi do połączenia aplikacji samej z sobą)

 Po nawiązaniu połączenia aplikacja ma możliwość wysyłania oraz odbierania wiadomości.

(7)

Zadanie 2. Proszę zrealizować dwie aplikacje, które powinny odznaczać się następującymi cechami:

 Pierwsza aplikacja klienta ma za zadanie nawiązać połączenie niebezpośrednio z innym klientem, ale poprzez server pośredniczący. Aplikacja nie odbiera połączeń, jedynie nawiązuje.

 Aplikacja klienta pozwala dołączyć do wiadomości informację kto nadał wiadomość (login, nr klienta) oraz adresata wiadomości.

 Przykładowy wygląd Klienta.

 Druga aplikacja serwera, który nasłuchuje i obsługuje wielu klientów. Server pośredniczy, odbiera wiadomości od klientów, odczytuje adresata i przesyła go do docelowego klienta.

 Aplikacje serwera proszę utworzyć jako osobny projekt pod jedną solucją wraz z klientem. W projekcie serwera można określić referencję do projektu klienta, dzięki czemu klasy klienta będą widoczne w projekcie serwera.

Cytaty

Powiązane dokumenty

Wierzchołek:=Tmp; /*(Zmienna TMP nie jest już potrzebna i może zostać użyta do innych celów. Od teraz Wierzchołek znowu wskazuje na użyteczną zmienną dynamiczną – na

Za pomocą kwerend można pobierać i tworzyć zestawienia danych które Cię aktualnie interesują.. Sortowanie polega na uporządkowanym układaniu

Do opisu/tworzenia strony często stosuje się język HTML (z ang. Hypertext Markup Language). Nazwa strona jest jednak nazwą umowną, ponieważ jest zbudowana z wielu stron, które

od podstawy prawnej wykorzystywania przez Ciebie danych osobowych oraz od celu ich przetwarzania..

Tworzenie nowych grup łamania jest możliwe w kreatorze raportu (przy wybraniu odpowiedniego rozkładu) lub w modelu danych poprzez „wyciągnięcie” kolumny na zewnątrz grupy w

Możliwe jest aby po lewej stronie znaku równości (nierówności, nieostrej równości) była umieszczona para (trójka, itd.) wartości (kolumn). Musi jej odpowiadać liczba kolumn lub

w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE oraz zgodnie z

w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE oraz zgodnie z