⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 klient_rmi.java

📁 Client/Server application. This application was written using RMI Java. It resolve "access to critic
💻 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 + -