📄 klient_rmi.java
字号:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
import java.io.*;
import java.util.Random;
import java.math.*;
public class Klient_RMI implements KlientInterface, Serializable {
private final String nazwaSerwera = "Serwer_RMI";
private static SerwerInterface interfejsSerwera;
private String adresSerwera;
private int idKlienta;
private int opoznienie;
private int nrKlientaDoSekcji;
private int czasSekcjiKrytycznej;
private String mojeIP;
public Klient_RMI()
{
this.idKlienta = setIDKlienta();
this.opoznienie = 0;
this.czasSekcjiKrytycznej = 0;
this.mojeIP = getMojeIP();
System.setProperty("java.security.policy", "klient.policy");
System.setSecurityManager(new RMISecurityManager());
System.out.println("KLIENT " + this.getMojeIP() + ":" + this.getID() + " : Zainstalowano zarzadce bezpieczenstwa");
}
/*ustaw IDKlienta*/
private int setIDKlienta()
{
Random r = new Random();
int liczba = Math.abs(r.nextInt());
return liczba;
}
/*sprawdz jaki ID klienta - przeznaczone do wywolania po stronie serwera*/
public int getIDKlienta() throws RemoteException
{
return idKlienta;
}
/*sprawdz jaki ID klienta - przeznaczone do wywolania po stronie klienta*/
public int getID()
{
return idKlienta;
}
/*ustaw symulowane opoznienie*/
public void setOpoznienie(int opoznienie)
{
this.opoznienie = opoznienie;
}
/*pobierz wartosc dla symulowanego opoznienia*/
public int getOpoznienie() throws RemoteException
{
return opoznienie;
}
public int getCzasWsekcji()
{
return czasSekcjiKrytycznej;
}
public void setCzasWsekcji(int czas)
{
this.czasSekcjiKrytycznej = czas;
}
/* komunikat z serwera*/
public void wyswietlKomunikat(String komunikat) throws RemoteException
{
System.out.println(komunikat);
}
public void setAdresSerwera(String adresSerwera)
{
this.adresSerwera = adresSerwera;
}
public String getAdresSerwera()
{
return adresSerwera;
}
public String getNazwaSerwera()
{
return nazwaSerwera;
}
public static String getMojeIP()
{
String adresIP = new String("");
try
{
adresIP = InetAddress.getLocalHost().getHostAddress();
} catch (java.net.UnknownHostException e) { e.printStackTrace(); }
return adresIP;
}
/*sprawdz IP klienta*/
public String getIPKlienta() throws RemoteException
{
return mojeIP;
}
public void wejscieDoSekcjiKrytycznej() throws RemoteException
{
/*komunikat ...*/
System.out.println("KLIENT " + this.getMojeIP() + ":" + this.getID() + " : Wchodze do sekcji krytycznej");
System.out.println("");
System.out.println("\t################################");
System.out.println("\t# SEKCJA KRYTYCZNA #");
System.out.println("\t################################");
System.out.println("");
if(this.czasSekcjiKrytycznej == 0)
{
try
{
BufferedReader klawiatura = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Aby wyjsc z sekcji krytycznej nacisnij Enter[]: ");
klawiatura.readLine();
} catch (IOException e) { e.printStackTrace(); }
}
else
{ //czas w sekcji
try{ Thread.sleep(this.getCzasWsekcji()); }
catch(InterruptedException e) { e.printStackTrace(); }
}
System.out.println("KLIENT " + this.getMojeIP() + ":" + this.getID() + " : Wyszedlem z sekcji krytycznej");
}
public void menuKlienta()
{
try
{
BufferedReader klawiatura = new BufferedReader(new InputStreamReader(System.in));
String odczyt = null;
System.out.print("KLIENT " + this.getMojeIP() + ":" + this.getID() + " : Podaj opoznienie [w sek.] i nacisnij Enter:");
odczyt = klawiatura.readLine();
if( odczyt.equals("") )
this.setOpoznienie(0); //bez opoznienia
else this.setOpoznienie((Integer.parseInt(odczyt)) * 1000); //czas w sekundach
odczyt = null; //czyscimy
System.out.print("KLIENT " + this.getMojeIP() + ":" + this.getID() + " : Podaj czas pobytu [w sek.] w sekcji krytycznej i nacisnij Enter:");
odczyt = klawiatura.readLine();
/*ustawienie czasu dla sekcji*/
if(odczyt.equals(""))
this.setCzasWsekcji(0); //reczne zwolnienie sekcji
else this.setCzasWsekcji( (Integer.parseInt(odczyt)) * 1000 ); //czas w sekundach
System.out.print("KLIENT " + this.getMojeIP() + ":" + this.getID() +" : Nacisnij Enter aby wyslac zamowienie: ");
klawiatura.readLine();
} catch(IOException e) { e.printStackTrace(); }
}
public static void main(String[] args) {
if(args.length < 1){
usage();
System.exit(0);
}
Klient_RMI klient = new Klient_RMI();
klient.setAdresSerwera(args[0]);
System.out.println("KLIENT " + klient.getMojeIP() + ":" + klient.getID() + " : Wykorzystuje serwer na " + klient.getAdresSerwera());
try {
interfejsSerwera = (SerwerInterface)Naming.lookup("rmi://" + klient.getAdresSerwera() + ":1099/" + klient.getNazwaSerwera());
System.out.println("KLIENT " + getMojeIP() + ":" + klient.getID() + " : Utworzono odnosnik do dostawcy");
UnicastRemoteObject.exportObject(klient);
//menu z ustawieniami
klient.menuKlienta();
//klient wysyla zamowienie
interfejsSerwera.rejestrujKlienta(klient);
}
catch (MalformedURLException e)
{
System.out.println("KLIENT " + getMojeIP() + ":" + klient.getID() + " : Niepoprawny URL ???");
System.exit(0);
}
catch (NotBoundException e) {
System.out.println("KLIENT " + getMojeIP() + ":" + klient.getID() + " : Nie uzyskano polaczenia z serwerem");
System.exit(0);
}
catch (RemoteException e)
{
System.out.println("KLIENT " + getMojeIP() + ":" + klient.getID() + " : Zdalny wyjatek ???");
e.printStackTrace();
System.exit(0);
}
catch (Exception e)
{
System.out.println("KLIENT " + getMojeIP() + ":" + klient.getID() + " : Wyjatek ???");
e.printStackTrace();
System.exit(0);
}
//System.out.println("KLIENT: " + klient.getID() + " Koniec");
}
private static void usage()
{
System.out.println("\nuzycie: " + Klient_RMI.class.getName() + " [ IP_serwera ] ");
}
}/*Klient_RMI*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -