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

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

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielow tkowa prosty komunikator

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

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

Programowanie współbieżne i rozproszone

JAVA I SIECI. MATERIAŁY:

Platformy Programistyczne Zagadnienia sieciowe i wątki

Komunikacja z użyciem gniazd aplikacje klient-serwer

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

Przykłady interfejsu TCP i UDP w Javie

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Programowanie rozproszone w języku Java

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

Adresy URL. Zaawansowane technologie Javy 2019

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Programowanie w języku Java

Aplikacje RMI

Java programowanie w sieci. java.net RMI

Serwer współbieżny połączeniowy

Sieci Komputerowe Modele warstwowe sieci

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Wybrane działy Informatyki Stosowanej

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

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Java programowanie sieciowe

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

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

Programowanie Sieciowe 1

URL. Budowa URL (ang. Uniform Resource Locator): working#downloading

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Protokoły sieciowe - TCP/IP

Programowanie sieciowe

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Podstawowe typy serwerów

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Dr Michał Tanaś(

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

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

Java a dost p do Internetu.

Tworzenie i wykorzystanie usług

Aplikacje RMI Lab4

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

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Zadanie 2: transakcyjny protokół SKJ (2015)

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Programowanie aplikacji w architekturze Klient-Serwer - UDP

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

Wywoływanie metod zdalnych

Model warstwowy Warstwa fizyczna Warstwa łacza danych Warstwa sieciowa Warstwa transportowa Warstwa aplikacj. Protokoły sieciowe

Model sieci OSI, protokoły sieciowe, adresy IP

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

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

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

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Wywoływanie metod zdalnych

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

Języki i metody programowania Java INF302W Wykład 4

Networking. Zaawansowane technologie Javy 2019

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

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

Java. Programowanie Obiektowe Mateusz Cicheński

Podstawowe pojł cia. Czego sił nauczymy? Pojł cia hosta. Hosty Adresowanie Internetowe Porty Protokoóy

Protokoły sieciowe model ISO-OSI Opracował: Andrzej Nowak

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak

Protokoły internetowe

Warstwy i funkcje modelu ISO/OSI

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

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Strumienie i serializacja

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

Remote Method Invocation 17 listopada 2010

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Mechanizmy pracy równoległej. Jarosław Kuchta

1. Model klient-serwer

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

TCP/IP. Warstwa aplikacji. mgr inż. Krzysztof Szałajko

Java, bazy danych i SSL

Programowanie obiektowe

Wybrane działy Informatyki Stosowanej

Klient-Serwer Komunikacja przy pomocy gniazd

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Plan wykładu. 1. Sieć komputerowa 2. Rodzaje sieci 3. Topologie sieci 4. Karta sieciowa 5. Protokoły używane w sieciach LAN 6.

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

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ć

System operacyjny UNIX Internet. mgr Michał Popławski, WFAiIS

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

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Bezpieczne uruchamianie apletów wg

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

Przesyłania danych przez protokół TCP/IP

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

Zarządzanie infrastrukturą sieciową Modele funkcjonowania sieci

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

Transkrypt:

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez: TCP (Transport Control Protocol) User Datagram Protocol (UDP). TCP/IP (IP - Iternet Protocol) jest warstwowym zestawem protokołów i odpowiada siedmiowarstwowemu modelowi ISO/OSI (Open Systems Interconnection) Warstwa ISO/OSI TCP/IP Uwagi 7 Aplikacji 6 Prezentacji SMTP, HTTP, FTP, RPC, TELNET 5 Sesji DNS, LDAP 4 Transportowa TCP/UDP 3 Sieciowa 2 Łącza danych IP (Internet), ICMP ARP, RARP, LLC 802.2, Ethernet 802.3 Udostępnia procesom aplikacyjnym APs (Application Processes) dostęp do połączenia OSI, czyli: Zasoby przetwarzające informację Zasoby komunikacyjne Ujednolicenie formatu przesyłanych danych (opis struktur danych-syntaktyka oraz sposobem kodowania reprezentacją bitową w czasie transferu) Jest odpowiedzialna za zapewnienie uporządkowanej wymiany danych miedzy segmentami warstwy prezentacji i korzysta z usług warstwy transportowej Zapewnia poprawność przesyłanych danych między systemami końcowymi Nadzorowanie wiadomości przesyłanych miedzy dwoma komputerami poprzez sieć Ustanawianie połączenia, nadzór nad bezbłędnym transferem bitów 1 Fizyczna Przesyłanie strumienia bitów za pomocą medium fizycznego Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Protokół HTTP zastosowany do czytania zasobów www wskazanych za pomocą URL (Uniform Resource Locator) czyli danych z pliku w formacie HTML (HyperText Markup Language), musi korzystać z niezawodnego kanału komunikacji punkt-punkt, jaki zapewnia protokół połączeniowy TCP, gdyż otrzymywane dane muszą wystąpić w tej samej kolejności, w której były przesyłane, Protokół UDP, bezpołączeniowy protokół przesyłania niezależnych pakietów danych (datagramów) pomiędzy dwoma aplikacjami w sieci, może być wykorzystany do programów typu ping itp. nie ma pewności, czy dany datagram nieuszkodzony dotrze do określonego komputera oraz czy komputer czeka nadal na odpowiedź. Komputery w sieci są identyfikowane przez 32-bitowe adresy IP, a procesy działające na tych komputerach są identyfikowane poprzez 16-bitowe numery portów (port reprezentuje kolejkę danych, które mają być dostarczane do danego procesu wykonującego pewien program). Program wykorzystujący protokół HTTP ma przydzielony domyślnie port o numerze 80. Programy odbierają lub wysyłają dane poprzez związane z numerami portów gniazda (sockets). Gniazdo jest definiowane przez warstwę transportową modelu ISO/OSI. Gniazdo jest końcowym punktem połączenia między programami wykonywanymi na komputerach sieciowych w systemie klient-serwer. Gniazdo pełni rolę interfejsu programowego umożliwiającego aplikacjom dostęp do protokołów TCP i UDP i wymianę danych poprzez sieć pracującą pod kontrolą protokołów TCP/IP. Program serwera wykonywany na konkretnej maszynie ma przypisane do pewnego numeru portu gniazdo (typu ServerSocket), poprzez które "nasłuchuje" za pomocą metody accept klasy ServerSocket ewentualnego żądania nawiązania łączności przez klienta (gniazdo typu Socket). Jest to możliwe, jeśli klient (program klienta) zna adres komputera sieciowego, na którym jest wykonywany serwer oraz numer portu, do którego serwer jest dołączony i utworzy odpowiednie gniazdo typu Socket (związane z numerem portu i adresem serwera), poprzez które może prowadzić komunikację z serwerem. Serwer akceptuje połączenie, a następnie tworzy dla klienta nowe gniazdo (typu Socket) ze zmiennymi wskazującymi na obiekty klas typu InputStream i OutputStream. W pakiecie java.net klasy Socket i ServerSocket służą do komunikacji w oparciu o protokół połączeniowy TCP W pakiecie java.net klasy DatagramSocket, DatagramPacket oraz MulticastSocket są wykorzystywane do komunikacji UDP. W pakiecie java.net klasy klasy: URL oraz URLConnection i URLEncoder służą do nawiązania łączności z zasobami www. Komunikacja w sieci za pomocą klas z pakietu java.net, opiera się między innymi na implementacji gniazd. Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 2

Przykład 1 - Aplikacja typu Klient-Serwer 1.1.Start serwera 1.2. Start klienta 1.3. Reakcja serwera Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 3

Klient 0 (host 1) Wątek 1 Socket Pierwszy accept host 2 Serwer0 Wątek 2 ServerSocket Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 4

1.1. Instancje tej klasy, obowiązkowo implementującej interfejs Serializable są wykorzystane do przesyłania wiadomości przez sieć za pomocą strumieni import java.io.*; import java.util.*; public class Wiadomosc implements Serializable String dane; Date data; public void zapiszwiadomosc() data = new Date(); dane ="Wyslij"; public void odczytajwiadomosc() System.out.println(data); System.out.println(dane); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 5

1.2. Program serwera - ten program należy uruchomić jako pierwszy import java.net.*; import java.io.*; public class serwer0 implements Runnable public void run() System.out.println("Serwer startuje na hoscie "+host); try try gniazdo_klienta = serwer.accept(); catch (IOException e) System.out.println("Nie mozna polaczyc sie z klientem "+e); System.exit(1); wyjscie = new ObjectOutputStream(gniazdo_klienta.getOutputStream()); wyjscie.flush(); wejscie = new ObjectInputStream(gniazdo_klienta.getInputStream()); wiadomosc = (Wiadomosc) wejscie.readobject(); System.out.println("Jaka wiadomosc odebral serwer od klienta:"); wiadomosc.odczytajwiadomosc(); wejscie.close(); wyjscie.close(); gniazdo_klienta.close(); catch (Exception e) System.out.println("Wyjatek serwera "+e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 6

private int sport; private ServerSocket serwer; private Socket gniazdo_klienta; private ObjectOutputStream wyjscie; private ObjectInputStream wejscie; private String host; private Wiadomosc wiadomosc; public serwer0(int port_, String host_) sport = port_; host=host_; try serwer = new ServerSocket(sPort); catch(ioexception e) System.out.println(e); public static void main(string args[]) throws Exception String host_ = InetAddress.getLocalHost().getHostName(); int Port = 5000; serwer0 s = new serwer0(port, host_); Thread t = new Thread(s); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 7

1.2. Program klienta - ten program należy uruchomić jako drugi public class klient0 implements Runnable private int port; private Socket gniazdo_klienta; private ObjectOutputStream wyjscie; private ObjectInputStream wejscie; private String host; private Wiadomosc wiadomosc; klient0(string host_, int port_) host = host_; port = port_; public static void main(string args[]) throws Exception //String s = InetAddress.getLocalHost().getHostName(); String s = InetAddress.getByName("kloc").getHostName(); Klient0 k= new klient0(s, 5000); Thread t = new Thread(k); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 8

public void run() try gniazdo_klienta = new Socket (host,port); wejscie = new ObjectInputStream(gniazdo_klienta.getInputStream()); wyjscie = new ObjectOutputStream(gniazdo_klienta.getOutputStream()); wyjscie.flush(); System.out.println("Klient startuje na hoscie "+InetAddress.getLocalHost().getHostName()); wiadomosc = new Wiadomosc(); wiadomosc.zapiszwiadomosc(); System.out.println("Co wysyla klient: "); wiadomosc.odczytajwiadomosc(); wyjscie.writeobject(wiadomosc); gniazdo_klienta.close(); wyjscie.close(); wejscie.close(); catch (Exception e) System.out.println("Wyjatek klienta "+e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 9

Przykład 2 - Aplikacja typu Klient-Serwer realizująca zadany protokół Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 10

Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 11

A(i=1) A(i=1) A(i=1) AA(i=1) AA(i=1) AA(i=1) Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 12

2.1 Program serwera - ten program należy uruchomić jako pierwszy import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.inetaddress; import java.net.serversocket; import java.net.socket; public class serwer1 implements Runnable private int sport; private ServerSocket serwer; private Socket gniazdo_klienta; private ObjectOutputStream wyjscie; private ObjectInputStream wejscie; private String host, wiadomosc; private String wiadomosci []="AA", "BB", "CC"; public serwer1(int port_, String host_) sport = port_; host = host_; try serwer = new ServerSocket(sPort); catch (IOException e) System.out.println(e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 13

public void run() System.out.println("Serwer startuje na hoscie " + host); try try gniazdo_klienta = serwer.accept(); catch (IOException e) System.out.println("Nie mozna polaczyc sie z klientem " + e); System.exit(1); //przerwanie pracy serwera nie jest zalecane w praktyce wyjscie = new ObjectOutputStream(gniazdo_klienta.getOutputStream()); wyjscie.flush(); wejscie = new ObjectInputStream(gniazdo_klienta.getInputStream()); for (int i = 0; i < wiadomosci.length; i++) wiadomosc = (String) wejscie.readobject(); System.out.println("Serwer odbiera: "+wiadomosc); wyjscie.writeobject(wiadomosci[i]); System.out.println("Serwer wysyla: "+wiadomosci[i]); wejscie.close(); wyjscie.close(); gniazdo_klienta.close(); catch (Exception e) System.out.println("Wyjatek serwera " + e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 14

public static void main(string args[]) throws Exception String host_ = InetAddress.getLocalHost().getHostName(); int Port = 15000; serwer1 s2 = new serwer1(port, host_); Thread t = new Thread(s2); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 15

2.2. Program klienta ten program należy wywołać jako drugi import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.inetaddress; import java.net.socket; public class klient1 implements Runnable public void run() try gniazdo_klienta = new Socket(host, port); wejscie = new ObjectInputStream(gniazdo_klienta.getInputStream()); wyjscie = new ObjectOutputStream(gniazdo_klienta.getOutputStream()); wyjscie.flush(); System.out.println("Klient startuje na hoscie " + host); for (int i = 0; i < wiadomosci.length; i++) wyjscie.writeobject(wiadomosci[i]); System.out.println("Klient wysyla: " + wiadomosci[i]); wiadomosc = (String) wejscie.readobject(); System.out.println("Klient odbiera: " + wiadomosc); gniazdo_klienta.close(); wyjscie.close(); wejscie.close(); catch (Exception e) System.out.println("Wyjatek klienta " + e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 16

private int port; private Socket gniazdo_klienta; private ObjectOutputStream wyjscie; private ObjectInputStream wejscie; private String host, wiadomosc; private String wiadomosci[] = "A", "B", "C"; klient1(string host_, int port_) host = host_; port = port_; public static void main(string args[]) throws Exception String s = InetAddress.getLocalHost().getHostName(); //String s = InetAddress.getByName("kloc").getHostName(); klient1 k2 = new klient1(s, 15000); Thread t = new Thread(k2); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 17

Przykład 3 - Aplikacja typu Klient-Serwer. Program wielowątkowy. Klient 0 (host 1) Wątek 1 Socket Pierwszy Klient 1 (host 2) Wątek 2 Socket Drugi Komponent serwera Wątek pochodny 3.1 accept accept Komponent serwera Wątek pochodny 3.2 host 3 Serwer Wątek 3 ServerSocket Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 18

3.1 Program serwera - ten program należy uruchomić jako pierwszy import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.inetaddress; import java.net.serversocket; import java.net.socket; /** * @author kruczkiewicz */ public class serwer2 implements Runnable public serwer2(int port_, String host_) sport = port_; host = host_; try serwer = new ServerSocket(sPort); catch (IOException e) System.out.println(e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 19

public void run() int numer = 0; Socket s = null; ObjectOutputStream output; ObjectInputStream input; System.out.println("Serwer startuje na hoscie " + host); while (true) try s = serwer.accept(); if (s == null) continue; output = new ObjectOutputStream(s.getOutputStream()); output.flush(); input = new ObjectInputStream(s.getInputStream()); komponent_klienta_po_stronie_serwera komp_klienta = new komponent_klienta_po_stronie_serwera(s,input,output); Thread watek_komponentu_klienta = new Thread(komp_klienta); watek_komponentu_klienta.start(); catch (IOException e) System.out.println("Nie mozna polaczyc sie z klientem " + e); System.exit(1); // przerwanie pracy serwera nie jest zalecane w praktyce Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 20

private int sport; private ServerSocket serwer; private String host; public static void main(string args[]) throws Exception String host_ = InetAddress.getLocalHost().getHostName(); serwer2 s2 = new serwer2(5000, host_); Thread t = new Thread(s2); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 21

3.2. Program komponentu klienta po stronie serwera uruchamiany po wykonaniu metody accept import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.socket; public class komponent_klienta_po_stronie_serwera implements Runnable private Socket s; private ObjectOutputStream output; private ObjectInputStream input; private String nazwa; public komponent_klienta_po_stronie_serwera(socket s, ObjectInputStream input, ObjectOutputStream output) this.s = s; this.input = input; this.output = output; Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 22

public void run() String m1, m2; try nazwa = (String) input.readobject(); m1 = nazwa; while (true) if (m1.equals(nazwa + ": "+"czesc")) break; System.out.println("Odebrano wiadomosc od klienta: " + m1 + "\n"); m2 = WEWY.weString("Podaj wiadomosc dla klienta "+ nazwa + ": "); output.writeobject(nazwa + ": " + m2); m1 = (String) input.readobject(); input.close(); output.close(); s.close(); catch (Exception e) System.out.println("Wyjatek komponentu klienta po stronie serwera "+e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 23

3.3. Program klienta powinien być uruchomiony jako drugi import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.inetaddress; import java.net.socket; public class klient2 implements Runnable private int port; private Socket s; private ObjectOutputStream output; private ObjectInputStream input; private String host, nazwa; klient2(string host_, int port_) host = host_; port = port_; public static void main(string args[]) throws Exception String s = InetAddress.getLocalHost().getHostName(); klient2 k2 = new klient2(s, 5000); Thread t = new Thread(k2); t.start(); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 24

public void run() String m1, m2; try s = new Socket(host, port); input = new ObjectInputStream(s.getInputStream()); output = new ObjectOutputStream(s.getOutputStream()); output.flush(); System.out.println("Klient startuje na hoscie "+s.getlocalhost().gethostname()); nazwa = WEWY.weString("Przedstaw sie: "); output.writeobject(nazwa); do m1 = (String) input.readobject(); System.out.println("\n" + "Dane odebrane od serwera: " + m1); m2 = WEWY.weString("Podaj wiadomosc dla serwera: "); output.writeobject(nazwa + ": " + m2); while (!m2.equals("czesc")); output.close(); input.close(); s.close(); catch (Exception e) System.out.println("Wyjatek klienta " + e); Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 25

3.4. Klasa realizująca wprowadzanie danych z klawiatury za pomocą strumieni public class WEWY static String westring(string menu) InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); System.out.print(menu); try return bufor.readline(); catch (IOException e) System.err.println("Blad IO String"); return ""; Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 26

Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 27

Dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 28