• Nie Znaleziono Wyników

Powtórzenie wybranych zagadnień 1. Aplikacja typu Klient-Serwer 1.1.Start serwera 1.2. Start klienta 1.3. Reakcja serwera

N/A
N/A
Protected

Academic year: 2021

Share "Powtórzenie wybranych zagadnień 1. Aplikacja typu Klient-Serwer 1.1.Start serwera 1.2. Start klienta 1.3. Reakcja serwera"

Copied!
1
0
0

Pełen tekst

(1)

Powtórzenie wybranych zagadnień 1. Aplikacja typu Klient-Serwer

1.1.Start serwera

1.2. Start klienta

1.3. Reakcja serwera

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

(2)

import java.net.*; //ten program należy uruchomić jako pierwszy import java.io.*;

public class serwer2 implements Runnable { private int sPort;

private ServerSocket serwer;

private Socket gniazdo_klienta;

private ObjectOutputStream wyjscie;

private ObjectInputStream wejscie;

private String host;

private Wiadomosc wiadomosc;

public serwer2(int port_, String host_) { sPort = port_; host=host_;

try

{ serwer = new ServerSocket(sPort);

} catch(IOException e) { System.out.println(e); } }

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

public static void main(String args[]) throws Exception { String host_ = InetAddress.getLocalHost().getHostName();

int Port = 5000;

(3)

import java.net.*; //ten program należy uruchomić jako drugi import java.io.*;

public class klient2 implements Runnable { private int port;

private Socket gniazdo_klienta;

private ObjectOutputStream wyjscie;

private ObjectInputStream wejscie;

private String host;

private Wiadomosc wiadomosc;

klient2(String host_, int port_) { host = host_;

port = port_;}

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

public static void main(String args[]) throws Exception

{ //String s = InetAddress.getLocalHost().getHostName();

String s = InetAddress.getByName("kloc").getHostName();

klient2 k2= new klient2(s,5000);

Thread t = new Thread(k2);

t.start();

} }

(4)

2. RMI

2.1. Definicja interfejsu obiektu zdalnego oraz klasę obiektu zdalnego implementującą ten interfejs

1) interfejs RMI_Obiekt_zdalny import java.rmi.*;

import java.util.*;

public interface RMI_Obiekt_zdalny extends Remote { public void pobierzWiadomosc(String s, Wiadomosc w)

throws RemoteException;

public Wiadomosc zmienWiadomosc(String s, Wiadomosc w)

throws RemoteException;

}

2)

klasa implementująca interfejs obiektu zdalnego -

RMI_Obiekt import java.io.*;

import java.rmi.*;

import java.rmi.server.*;

import java.util.*;

public class RMI_Obiekt extends UnicastRemoteObject implements RMI_Obiekt_zdalny {

public RMI_Obiekt() throws RemoteException { super(); }

public void pobierzWiadomosc(String s, Wiadomosc w) throws RemoteException { System.out.println(s);

w.odczytajWiadomosc(); }

public Wiadomosc zmienWiadomosc(String s, Wiadomosc w)

throws RemoteException { System.out.println(s);

w.odczytajWiadomosc();

Wiadomosc w1= new Wiadomosc();

w1.dane="Nowa Wiadomosc";

w1.data=new Date();

return w1; }

(5)

3) wykonanie architektury trójwarstwowej RMI – pliki RMI_Obiekt_Skel.class oraz RMI_Obiekt_Stub.class za pomocą kompilatora rmic

(6)

2.2.) wykonaie serwera RMI z obiektem zdalnym – ten program należy uruchomoc jako pierwszy

import java.rmi.*;

import java.rmi.server.*;

public class RMI_Server {

public static void main(String[] args)

{ System.setSecurityManager(new RMISecurityManager());

try

{ RMI_Obiekt_zdalny wiadomosc = new RMI_Obiekt();

Naming.rebind("RMI_Obiekt", wiadomosc);

System.out.println("Serwer przygotowany do RMI");

}

catch (Exception e)

{System.out.println("Blad "+e);

} } }

(7)

2.3. Wykonanie klienta RMI – ten program należy uruchomić jako drugi import java.rmi.*;

import java.rmi.server.*;

import java.rmi.registry.*;

import java.io.*;

import java.util.*;

public class RMI_Klient { RMI_Obiekt_zdalny obiekt;

Wiadomosc wiadomosc1, wiadomosc2;

public static void main(String []args) { RMI_Klient klient = new RMI_Klient();

System.setSecurityManager(new RMISecurityManager());

try

{ klient.obiekt= (RMI_Obiekt_zdalny) Naming.lookup("RMI_Obiekt");

System.out.println("Klient przygotowany do RMI");

klient.wiadomosc1 = new Wiadomosc();

klient.wiadomosc1.zapiszWiadomosc();

klient.obiekt.pobierzWiadomosc (

"\nKlient uzywa metody pobierzWiadomosc obiektu z serwera za pomoca RMI", klient.wiadomosc1);

klient.wiadomosc2 = klient.obiekt.zmienWiadomosc(

"\nKlient uzywa metody zmienWiadomosc obiektu z serwera za pomoca RMI", klient.wiadomosc1);

System.out.println(

"Klient wyswietla zawartosc odebranego od serwera obiektu typu Wiadomosc");

klient.wiadomosc2.odczytajWiadomosc();

}

catch (Exception e)

{ System.out.println(e.getMessage());}

} }

(8)

Cytaty

Powiązane dokumenty

Oblicz, ile metrów kwadratowych folii potrzeba na wykonanie ścian (bez zadaszenia) ogrodowego namiotu, przedstawionego na rysunku, jeśli wysokość namiotu w najwyższym miejscu ma 2

WYMIAROWANIE INSTALACJI WODOCIĄGOWEJ WODY ZIMNEJ - PRZYKŁAD Dla domku jednorodzinnego podpiwniczonego wg załączonego podkładu budowlanego zaprojektować instalację

E People from different countries make this food in different ways F This food has a round shape.. G The name of this food says where it

Dodatkowo postanowiono uwzględnić rejestracje dotyczące różnych prędkości przejazdu tramwaju przez dany odcinek toru, tworząc razem pewien profil charakterystyczny dla

Prepare a column of 10 random values ranged between 0 and 100 (using the RAND function).. Format them in such a way that 2 decimals

Zwraca się jednocześnie uwagę na to, że przezwiska należące do tych kategorii mają po części identyczne mo­.. tywacje, ich powołanie do życia mogą

3 ICT Research online or think of a prank that follows all of the rules that you can play on somebody on April Fool’s Day?. What

Proszę stworzyć macierz o rozmiarze 4x3 wypełnioną losowymi wartościami całkowitymi z przedziału [0; 5], a następnie proszę za pomocą podwójnej pętli przeiterować każdy