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

📄 serwer_rmi.java

📁 Client/Server application. This application was written using RMI Java. It resolve "access to critic
💻 JAVA
字号:
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;






public class Serwer_RMI extends UnicastRemoteObject implements SerwerInterface, Runnable {

	public static int sekcja_krytyczna= 0;
	private Vector<Object> klienci = new Vector<Object>();
	
	
	private final String nazwaSerwera = "Serwer_RMI";
	private Registry rejestr;
	
	private final String komunikatZezwolenia = new String("SERWER : Pozwolenie na wejscie do sekcji krytycznej");
	private final String komunikatZakazu = new String("SERWER : Zakaz wejscia do sekcji krytycznej");

	
	public Serwer_RMI() throws RemoteException
	{
		
		System.out.println("SERWER : Utworzono obiekt serwera");
		try 
		{
			//rejestr = LocateRegistry.getRegistry(Registry.REGISTRY_PORT);
			rejestr = LocateRegistry.createRegistry(1099);
			System.out.println("SERWER : Zlokalizowano rejestr na porcie " + Registry.REGISTRY_PORT);
							
			
				
			rejestr.rebind(nazwaSerwera, this);

			System.out.println("SERWER : Zarejestrowano obiekt serwera ");
			System.out.println("SERWER : Oczekuje na zgloszenia ");
			
		 } catch (Exception e) 
		   {
				System.out.println("SERWER : ");
				e.printStackTrace();
				System.exit(0);
			}/*try ... catch*/
	  }/*Serwer_RMI*/
	
	
	public void run()
	{								
		//pobieramy pierwszego klienta z kolejki
		while(true)
		{
			//informujemy wszystkich o kolejnosci do sekcji (poza klientem, ktory jest pierwszy, bo za chwile wchodzi)		
			//prezentacja stanu kolejki na serwerze
			if(klienci.size() > 1)
				{
				for(int i = 1; i < klienci.size(); i++)
				{
					try
					{
						KlientInterface klient = (KlientInterface) klienci.get(i);
						klient.wyswietlKomunikat("SERWER : Jestes " + (i) + " w kolejce");
						klient.wyswietlKomunikat(komunikatZakazu + " ID klienta: " + klient.getIDKlienta());
						System.out.println("SERWER : " + klient.getIPKlienta() + ":" + klient.getIDKlienta() + " jest " + i + " w kolejce");
					} catch(Exception e) { e.printStackTrace(); }
				}/*for*/
			}/*if*/
			
			
			if( sekcja_krytyczna == 0 && !(klienci.isEmpty()) )
			{
				KlientInterface klientWchodzacy = (KlientInterface)klienci.get(0);
				klienci.remove(0);
				sekcja_krytyczna = 1;			//klient rezerwuje sekcje krytyczna
				
				try
				{					
				System.out.println(komunikatZezwolenia + " " + klientWchodzacy.getIPKlienta() + ":" + klientWchodzacy.getIDKlienta());				
				//opoznienie ustawiane na kliencie - symulowanie opoznien podczas przesylania przez siec
				Thread.sleep( klientWchodzacy.getOpoznienie() );
				klientWchodzacy.wyswietlKomunikat(komunikatZezwolenia + " " + klientWchodzacy.getIPKlienta() + ":" + klientWchodzacy.getIDKlienta());
				
				//klient moze wejsc do sekcji
				klientWchodzacy.wejscieDoSekcjiKrytycznej();
				System.out.println("SERWER :"  + " " + klientWchodzacy.getIPKlienta() + ":" + klientWchodzacy.getIDKlienta() + " wyszedl z sekcji krytycznej");				
				
				//po wyjsciu sekcja jest dostepna dla innych klientow	
				sekcja_krytyczna = 0;	
				
				}catch (Exception e) { e.printStackTrace(); }   		
			}
		}/*while*/
	}/*run*/	
		
		
	/*rejestracja klienta - klient w kolejce do sekcji*/
	public void rejestrujKlienta(KlientInterface obj) throws RemoteException
	{
		System.out.println("SERWER : Zamowienie klienta " + obj.getIPKlienta() + ":" + obj.getIDKlienta());
		try
		{
			if(sekcja_krytyczna == 1)
			{
			obj.wyswietlKomunikat(komunikatZakazu + " " + obj.getIPKlienta() + ":" + obj.getIDKlienta());
			obj.wyswietlKomunikat("SERWER : Podczas rejestracji jestes " + (klienci.size()+1) + " w kolejce");
			}
		
			klienci.add(obj);
	

	
			System.out.println("\nSERWER : System rejestracji klientow");	
			KlientInterface klient;
			for(int i = 0; i < klienci.size(); i++)
			{
				klient = (KlientInterface) klienci.get(i);
				System.out.println("SERWER : " + klient.getIPKlienta() + ":" + klient.getIDKlienta() + " jest " + (i+1) + " w kolejce");	
			 }
			System.out.println("");	
		} catch(Exception e) { e.printStackTrace(); }
	}
	
	
	public static void about()
	{	
		System.out.println("");
		System.out.println("\t########################################################");	
		System.out.println("\t#  SERWER SYNCHRONIZACJI DOSTEPU DO SEKCJI KRYTYCZNEJ  #");
		System.out.println("\t#                                                      #");
		System.out.println("\t#                autor: Szymon Bogdanski               #");
		System.out.println("\t########################################################");	
		System.out.println("");	
	}
	
	
	public static void main(String[] args) 
	{
		
	about();		// o programie ...
	System.setProperty("java.security.policy", "serwer.policy");
	System.setSecurityManager( new RMISecurityManager() );
	System.out.println("\nSERWER : Zainstalowano zarzadce bezpieczenstwa");
	//utworzenie dostawcy uslugi
		try 
		{
			Serwer_RMI serwer = new Serwer_RMI();
			Thread watekSerwera = new Thread(serwer, "Serwer");
			watekSerwera.start();	
		} catch (RemoteException e) { e.printStackTrace(); }
	}/*main*/
}/*Serwer_RMI*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -