Aplikacja wielowątkowa prosty komunikator



Podobne dokumenty
Aplikacja wielow tkowa prosty komunikator

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Kontenery i komponenty graficzne

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Przykłady interfejsu TCP i UDP w Javie

Połączenia między bazami danych i programem w języku Java część 2

Wykład 7 Tworzenie łącz w apletach, wątki, serializacja obiektów, gniazda

Programowanie w języku Java

Platformy Programistyczne Zagadnienia sieciowe i wątki

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

Iteracyjno-rozwojowy cykl oprogramowania 4

JAVA I SIECI. MATERIAŁY:

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

setdefaultcloseoperation(jframe.exit_on_close);//obsługa zamykania aplikacji setvisible(true); } //wyświetlenie okna

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Programowanie graficznych interfejsów użytkownika

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Java programowanie w sieci. java.net RMI

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

Wykład 4_2 część druga. Iteracyjno-rozwojowy cykl oprogramowania 4

Remote Method Invocation 17 listopada 2010

Komunikacja z użyciem gniazd aplikacje klient-serwer

Java. Programowanie Obiektowe Mateusz Cicheński

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Serwer współbieżny połączeniowy

Programowanie współbieżne i rozproszone

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Wywoływanie metod zdalnych

Programowanie rozproszone w języku Java

Wywoływanie metod zdalnych

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Aplikacje w Javie- wykład 11 Wątki-podstawy

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

WYMIANA I SKŁADOWANIE DANYCH MULTIMEDIALNYCH

Java - interfejs graficzny

Pierwsza ramka. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 10

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Programowanie obiektowe

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie sieciowe

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Aplikacje RMI

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Comparable<Klasa_uzytkownika>

SWING. dr Jarosław Skaruz

Aplikacje RMI Lab4

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Systemy Rozproszone - Ćwiczenie 6

Zbiór zadań do przedmiotu programowanie obiektowe

Ćwiczenie 8. Rozległe sieci komputerowe

Stanowe komponenty sesyjne

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

1. Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(string s) { return Integer.parseInt(s); }

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

SWING ZAGADNIENIA: wprowadzenie, kontenery i komponenty, LayoutManager, komponenty tekstowe. inne przydatne komponenty.

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Tworzenie elementów graficznych

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Programowanie aplikacji w architekturze Klient-Serwer - UDP

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Instrukcja 4 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwa klienta: Interfejs graficzny użytkownika

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Dokumentacja do API Javy.

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

1 Atrybuty i metody klasowe

Metody Metody, parametry, zwracanie wartości

Programowanie obiektowe

Programowanie obiektowe

1. Co można powiedzieć o poniższym kodzie?

Bartosz Jachnik - Kino

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Wprowadzenie do programowania współbieżnego. Grafika, Proste Animacje

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Programowanie obiektowe

Programowanie obiektowe

Podstawy współbieżności

Komunikatory typu TCP/IP lab2. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Java Foundation Clases. Tworzenie graficznych interfejsów użytkownika (GUI) w Javie

Współbieżność w środowisku Java

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Transkrypt:

Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host 3) Wątek 2 Komponent serwera Wątek pochodny 3.3 Klient: private int sport private String host private Socket s private ObjectOutputStream output private ObjectInputStream input //port serwera //nazwa hosta serwera //gniazdo klienta do komunikacji z serwerem, który znajduje //się na porcie sport i na komputerze host Serwer: private int sport private String host private ServerSocket serwer //gniazdo do wykrywania połączeń z klientem Komponent serwera: private Socket s //gniazdo do komunikacji z klientem private ObjectOutputStream output private ObjectInputStream input Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 2

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 3

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 4

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 5

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 6

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 7

Koniec komunikacji między klientem 1 a komponentem serwera po otrzymaniu słowa cześć komponent serwera potwierdza odebranie czesc wysłaniem słowa czesc i kończy połączenie. Komunikat Zapomnialem o pewnej sprawie nie zostanie wysłany przez klienta. Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 8

import java.net.*; import java.io.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; class server_komp extends JFrame implements Runnable, ActionListener private Socket s; private ObjectOutputStream output; private ObjectInputStream input; private String m = "", m1 = ""; JTextField nazwa = new JTextField(20); JTextArea komentarz = new JTextArea (4,18); public void actionperformed( ActionEvent evt) Object zrodlo = evt.getsource(); if (zrodlo == nazwa) m1 = nazwa.gettext(); if (!m1.equals("czesc")&& s!= null) try output.writeobject((object) m1); catch(exception e) System.out.println("Wyjatek serwera2 "+e); repaint(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 9

public server_komp(socket s_,objectinputstream input_, ObjectOutputStream output_) super("komponent serwera"); s=s_; input=input_; output=output_; setsize(300,160); nazwa.addactionlistener(this); setdefaultcloseoperation(jframe.dispose_on_close); JPanel panel=new JPanel(); JLabel etykieta_nazwy = new JLabel ("Napisz"); JLabel etykieta_komentarza = new JLabel ("Rozmowa"); komentarz.setlinewrap(true); komentarz.setwrapstyleword(true); panel.add(etykieta_nazwy); panel.add(nazwa); panel.add(etykieta_komentarza); panel.add(komentarz); JScrollPane obszar_przewijany1 = new JScrollPane ( komentarz, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); panel.add(obszar_przewijany1); setcontentpane(panel); setvisible(true); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 10

public void run() //metoda obiektu wykonywana wątku String pom; try komentarz.settext("serwer startuje na hoscie "+ InetAddress.getLocalHost().getHostName()+"\n"); while(true) m = (String) input.readobject(); pom=komentarz.gettext(); komentarz.settext(pom+"odebrano wiadomosc od klienta: "+ m +"\n"); if (m.equals("czesc")) m1="czesc"; output.writeobject((object) m1); break; input.close(); output.close(); s.close(); s=null; catch (Exception e) System.out.println("Wyjatek serwera1 "+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 11

public class serwer3 implements Runnable public void run() //metoda serwera wykonywana wątku - rozpoznaje połączenia Socket s; //z kolejnymi klientami ObjectOutputStream output; ObjectInputStream input; System.out.println("Serwer startuje na hoscie "+host); while (true) try s = serwer.accept(); //rozpoznawanie połączenia z klientem catch (IOException e) System.out.println("Nie mozna polaczyc sie z klientem "+e); System.exit(1); //to rozwiązanie obsługi wyjątku nie jest zalecane w praktyce! if ( s!= null) //tworzenie strumieni wejścia/wyjścia try //oraz wątku z obiektem do obsługi połączenia z kolejnym klientem output = new ObjectOutputStream(s.getOutputStream()); output.flush(); input = new ObjectInputStream(s.getInputStream()); Thread t=new Thread(new server_komp (s, input, output)); t.start(); catch (Exception e) System.out.println("Wyjatek serwera "+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 12

private int sport; private ServerSocket serwer; private String host; public serwer3(int port_, String host_) sport = port_; host=host_; try serwer = new ServerSocket(sPort); //serwer tworzy gniazdo do wykrywania catch(ioexception e) //połączeń z klientami System.out.println(e); //ten program należy uruchomić jako pierwszy public static void main(string args[]) throws Exception String host_ = InetAddress.getLocalHost().getHostName(); int Port = 5000; serwer3 s2 = new serwer3(port, host_); Thread t = new Thread(s2); t.start(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 13

import java.net.*; import java.io.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; public class klient3 extends JFrame implements Runnable, ActionListener private int port; private Socket s; private ObjectOutputStream output; private ObjectInputStream input; private String host, m = "", m1 = ""; JTextField nazwa = new JTextField(20); JTextArea komentarz = new JTextArea (4,18); public void actionperformed(actionevent evt) Object zrodlo = evt.getsource(); if (zrodlo == nazwa) m1 = nazwa.gettext(); if (s!= null) try output.writeobject((object) m1); catch(exception e) System.out.println("Wyjatek klienta3 "+e); repaint(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 14

klient3(string host_, int port_, int i) super("klient "+i); host = host_; port = port_; setsize(300,160); setdefaultcloseoperation(jframe.exit_on_close); nazwa.addactionlistener(this); JPanel panel=new JPanel(); JLabel etykieta_nazwy = new JLabel ("Napisz"); JLabel etykieta_komentarza = new JLabel ("Rozmowa"); komentarz.setlinewrap(true); komentarz.setwrapstyleword(true); panel.add(etykieta_nazwy); panel.add(nazwa); panel.add(etykieta_komentarza); panel.add(komentarz); JScrollPane obszar_przewijany1 = new JScrollPane (komentarz, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); panel.add(obszar_przewijany1); setcontentpane(panel); setvisible(true); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 15

public void run() //metoda obiektu wykonywana w wątku String pom; try s = new Socket (host, port); input = new ObjectInputStream(s.getInputStream()); output = new ObjectOutputStream(s.getOutputStream()); output.flush(); komentarz.settext("klient startuje na hoscie "+ InetAddress.getLocalHost().getHostName()+"\n"); catch (Exception e) System.out.println("Wyjatek klienta1 "+e); try do m = (String) input.readobject(); pom=komentarz.gettext(); komentarz.settext(pom + "Dane odebrane od serwera: " + m + "\n"); while(!m.equals("czesc")); s.close(); s = null; output.close(); input.close(); catch (Exception e) System.out.println("Wyjatek klienta2 "+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 16

//ten program należy uruchomić jako drugi public static void main(string args[]) throws Exception String s = InetAddress.getLocalHost().getHostName(); klient3 k2 = new klient3(s,5000,1); Thread t = new Thread(k2); t.start(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 17

import java.net.*; import java.io.*; class Tester public Tester() super(); /* Program Testera startuje najpierw tworząc obiekt serwera server i wstawia go do wątku i następnie tworzy tablicę clients zawierającą trzy wątki, każdy z klientem. Po starcie serwer tworzy gniazdo ServerSocket o nazwie serwer i jego metodą accept oczekuje na zgłoszenie klienta. Każdy z klientów po wystartowaniu w niezależnym wątku tworzy gniazdo typu Socket znając port i nazwę hosta, na którym znajduje się serwer oraz tworzy strumienie wejścia/wyjścia typu ObjectOutputStream o nazwie output oraz typu ObjectInputStream o nazwie input i wysyła do serwera komunikat (np. Jestem Kowalski). Kiedy metoda accept wykryje połączenie z klientem, zwraca powiązany z klientem obiekt typu Socket o nazwie s. Serwer tworzy strumienie wejścia/wyjścia typu ObjectOutputStream o nazwie output oraz typu ObjectInputStream o nazwie input. Następnie tworzy obiekt typu server_komp i wstawia go wątku pochodnego przekazując mu gniazdo s oraz strumienie input i output. Za jego pośrednictwem może serwer porozumiewać się z klientem i działać jednocześnie niezależnie tzn. identyfikować za pomocą metody accept gniazda ServerSocket połączenia z nowymi klientami, tworząc nowe wątki pochodne z obiektami typu server_komp. / Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 18

public static void main(string args[]) int NUMCLIENTS = 3; int sport=5000; String host; Thread server; Thread clients[]= new Thread[NUMCLIENTS]; try host = InetAddress.getLocalHost().getHostName(); System.out.println("Start Serwera on hoscie "+ host); server = new Thread(new serwer3(sport,"server"), host); server.start(); for (int i=0;i<clients.length;i++) System.out.println("Start Klienta " + (i +1)); clients[i]=new Thread(new klient3(host,sport,i)); clients[i].start(); catch (UnknownHostException e) System.out.println("Nieznany wyjątek podczas startu klienta"); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 19