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

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.

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

Programowanie w języku Java

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

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

Platformy Programistyczne Zagadnienia sieciowe i wątki

Przykłady interfejsu TCP i UDP w Javie

Iteracyjno-rozwojowy cykl oprogramowania 4

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

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

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

JAVA I SIECI. MATERIAŁY:

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

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

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

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

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

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

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

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

Programowanie obiektowe

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

Java - interfejs graficzny

Remote Method Invocation 17 listopada 2010

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

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

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

WYMIANA I SKŁADOWANIE DANYCH MULTIMEDIALNYCH

Programowanie rozproszone w języku Java

Programowanie współbieżne i rozproszone

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

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

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

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

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

Serwer współbieżny połączeniowy

Comparable<Klasa_uzytkownika>

Tworzenie elementów graficznych

Java. Programowanie Obiektowe Mateusz Cicheński

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Komunikacja z użyciem gniazd aplikacje klient-serwer

Wywoływanie metod zdalnych

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

Wywoływanie metod zdalnych

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

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

SWING. dr Jarosław Skaruz

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Zbiór zadań do przedmiotu programowanie obiektowe

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

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

Ćwiczenie 8. Rozległe sieci komputerowe

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

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ć

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

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

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

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

Stanowe komponenty sesyjne

Programowanie obiektowe

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

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

Systemy Rozproszone - Ćwiczenie 6

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

Aplikacje RMI Lab4

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

Programowanie obiektowe

Programowanie sieciowe

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

Aplikacje RMI

DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001)

Bartosz Jachnik - Kino

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

Dokumentacja do API Javy.

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

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

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

Programowanie aplikacji w architekturze Klient-Serwer - UDP

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

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

1 Atrybuty i metody klasowe

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

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

Obsługa zdarzeń w JAVIE ((ActionListener,ItemListener,TableModelListener))

Programowanie obiektowe

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

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Programowanie zdarzeniowe

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

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

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: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 1

Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 2

Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 3

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: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 4

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 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: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 5

public void actionperformed( ActionEvent evt) {Object zrodlo = evt.getsource(); if (zrodlo==nazwa) { m1=nazwa.gettext(); if (!m1.equals("czesc")&& s!=null) {output.writeobject((object) m1); catch(exception e) {System.out.println("Wyjatek serwera2 "+e); repaint(); public void run() //metoda obiektu wykonywana w tku {String pom; {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: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 6

public class serwer2 implements Runnable { private int sport; private ServerSocket serwer; private String host; public serwer2(int port_, String host_) { sport = port_; host=host_; { serwer = new ServerSocket(sPort); //serwer tworzy gniazdo do wykrywania catch(ioexception e) //poł cze z klientami { System.out.println(e); 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) { { 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 { //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); //ten program nale y uruchomi jako pierwszy public static void main(string args[]) throws Exception { String host_ = InetAddress.getLocalHost().getHostName(); int Port = 5000; serwer2 s2 = new serwer2(port, host_); Thread t = new Thread(s2); t.start(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 7

import java.net.*; import java.io.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; public class klient2 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); klient2(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: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 8

public void actionperformed(actionevent evt) {Object zrodlo = evt.getsource(); if (zrodlo==nazwa) { m1=nazwa.gettext(); if (s!=null) { output.writeobject((object) m1); catch(exception e) {System.out.println("Wyjatek klienta3 "+e); repaint(); public void run() //metoda obiektu wykonywana w tku { String pom; { 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); { do { if (!m1.equals("czesc") &&!m.equals("czesc")) { 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); //ten program nale y uruchomi jako drugi public static void main(string args[]) throws Exception { String s = InetAddress.getLocalHost().getHostName(); klient2 k2= new klient2(s,5000,1); Thread t = new Thread(k2); t.start(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 9

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. / public static void main(string args[]) { int NUMCLIENTS = 3; int sport=5000; String host; Thread server; Thread clients[]= new Thread[NUMCLIENTS]; { host = InetAddress.getLocalHost().getHostName(); System.out.println("Start Serwera on hoscie "+ host); server = new Thread(new serwer2(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 klient2(host,sport,i)); clients[i].start(); catch (UnknownHostException e) {System.out.println("Nieznany wyjątek podczas startu klienta"); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 7 10