¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦18Àå R M I  18.5.2 Call Back ±â¹ýÀ» »ç¿ëÇÑ Ã¤ÆÃ  

 

18.5.2 Call Back ±â¹ýÀ» »ç¿ëÇÑ Ã¤ÆÃ

 

À̹ø¿¡´Â 18.3Àý¿¡¼­ ¸¸µé¾ú´ø Çö±Ý ÀÔÃâ±Ý±â ÇÁ·Î±×·¥¿¡¼­ ÇÑ ´Ü°è ¹ßÀüÇÏ¿©, RMI¸¦ »ç¿ëÇÑ °£´ÜÇÑ Ã¤ÆÃ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°Ú½À´Ï´Ù.

 

ÀÌ Ã¤ÆÃ ÇÁ·Î±×·¥Àº ÄÝ ¹é(Call Back)À̶ó°í ºÒ¸®´Â ±â¹ýÀ» »ç¿ëÇÕ´Ï´Ù. ÄÝ ¹éÀº Ŭ¶óÀÌ¾ðÆ® °´Ã¼¿¡ ÄÝ ¹éÀ» À§ÇÑ ¸Þ¼­µå¸¦ Çϳª ¸¸µé¾î ³õ°í, ¼­¹ö¿¡¼­ Ŭ¶óÀ̾ðÆ®ÀÇ ÄÝ ¹é ¸Þ¼­µå¸¦ ¿ªÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ±â¹ý ÀÔ´Ï´Ù.

 

±×¸² 18‑11 ÄÝ ¹é ¸Þ¼­µå°¡ »ç¿ëµÇ´Â ¸ð½À

±×¸²À» º¸½Ã¸é, Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹ö¿¡°Ô Ŭ¶óÀ̾ðÆ®ÀÇ ÀÚ½ÅÀÇ ÂüÁ¶ÀÚ¸¦ addClient(this)¿Í °°Àº ¹æ½ÄÀ¸·Î ³Ñ°ÜÁÝ´Ï´Ù. ¼­¹ö´Â ¸Å°³ º¯¼ö·Î ³Ñ¾î¿Â Ŭ¶óÀÌ¾ðÆ® °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ »ç¿ëÇØ¼­ callBack()¸Þ¼­µå¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ¹æ½ÄÀ» »ç¿ëÇϸé, Ŭ¶óÀÌ¾ðÆ®°¡ ¿øÇÒ ¶§¿¡¸¸ ¼­¹öÀÇ ¸Þ¼­µå¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¼­¹ö ¿ª½Ã Ŭ¶óÀÌ¾ðÆ®¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇϱ⠶§¹®¿¡ ¼­¹öÀÇ »óŸ¦ µ¿ÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¾Ë·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦ ÀÌ ±â¹ýÀº ÀÚ¹Ù¿¡¼­ GUI(Graphic User Interface)¸¦ °³¹ßÇÒ ¶§ »ç¿ëÇÏ´Â AWTÀÇ Event ÇÁ·Î±×·¥¿¡¼­ ¸¹ÀÌ »ç¿ë µË´Ï´Ù.

 

¿ì¸®°¡ ¸¸µé äÆÃ ÇÁ·Î±×·¥ ¿ª½Ã À§ ±×¸²Ã³·³ äÆÃ Ŭ¶óÀÌ¾ðÆ®¿Í Ã¤ÆÃ ¼­¹ö·Î ±¸¼ºÀÌ µË´Ï´Ù. äÆÃ Ŭ¶óÀÌ¾ðÆ®´Â Ã¤ÆÃ ¼­¹ö¿¡ Á¢¼ÓÇØ¼­, »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ¸Þ½ÃÁö¸¦ ¼­¹ö¿¡ Àü¼ÛÇϰí, ¶Ç ´Ù¸¥ äÆÃ Ŭ¶óÀÌ¾ðÆ®°¡ ÀÔ·ÂÇÑ ¸Þ½ÃÁö¸¦ È­¸é¿¡ Ãâ·ÂÇÕ´Ï´Ù. äÆÃ ¼­¹ö´Â äÆÃ Ŭ¶óÀÌ¾ðÆ®µéÀÇ ¸ñ·ÏÀ» °¡Áö°í ÀÖ´Ù°¡, ¾î´À ÇÑ »ç¿ëÀÚ°¡ ¸Þ½ÃÁö¸¦ ÀÔ·ÂÇÏ¸é ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ Àü¼ÛÇÕ´Ï´Ù. À̶§ äÆÃ ¼­¹ö´Â äÆÃ Ŭ¶óÀ̾ðÆ®ÀÇ ÄÝ ¹é ¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ¸Þ½ÃÁö¸¦ º¸³À´Ï´Ù.

 

±×¸² 18‑12 ChatClient¿Í ChatServer °£ÀÇ ¸Þ¼­µå È£Ãâ

¸ÕÀú, ChatClient´Â ChatServerÀÇ addClient()¸Þ¼­µå¿¡°Ô ÀÚ±â ÀÚ½ÅÀÎ, ChatClient °´Ã¼ÀÇ ÂüÁ¶ÀÚ(this)¸¦ ³Ñ°ÜÁÜÀ¸·Î½á ´ëÈ­¿¡ Âü¿©ÇÏ°Ú´Ù°í ¾Ë·ÁÁÝ´Ï´Ù. ChatServer´Â ³Ñ°Ü ¹ÞÀº ChatClient °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ´ëÈ­ Âü°¡ÀÚµéÀÇ ¸ñ·Ï¿¡ Ãß°¡ÇÕ´Ï´Ù. ±×¸®°í äÆÃÀ» ³¡¸¶Ä¡°í ÅðÀåÀ» ÇÏ¿´À» °æ¿ì¿¡´Â disconnect()°¡ È£ÃâµÇ¾î clientList¿¡¼­ »èÁ¦¸¦ Çϰí client°¡ ÅðÀåÇÏ¿´À½À» ¾Ë·ÁÁÝ´Ï´Ù. ChatClient°¡ ChatServerÀÇ say()¸Þ¼­µå¸¦ ÅëÇØ ´ëÈ­ ³»¿ëÀ» ÀÔ·ÂÇϸé, ChatServer´Â ´ëÈ­ ¸ñ·Ï¿¡ Æ÷ÇԵǾî ÀÖ´Â ¸ðµç ChatClient °´Ã¼µéÀÇ printMessage()¶ó´Â ÄÝ ¹é ¸Þ¼­µå¿¡°Ô ÀÔ·Â ¹ÞÀº ¸Þ½ÃÁö¸¦ Àü¼ÛÇÕ´Ï´Ù. ÄÝ ¹é ¸Þ¼­µå¸¦ ÅëÇØ ¸Þ½ÃÁö¸¦ ³Ñ°Ü¹ÞÀº ¸ðµç ChatClient °´Ã¼µéÀº È­¸é¿¡ ´ëÈ­ ³»¿ëÀ» Ãâ·ÂÇÕ´Ï´Ù.

 

ÀÌÀüÀÇ ¿¹Á¦µé°ú ¸¶Âù°¡Áö·Î, ChatServer´Â ChatClient°¡ ³×Æ®¿öÅ©¸¦ ÅëÇØ Á¢±ÙÇϰí, ¸Þ¼­µå¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï, RMI ¿ø°Ý °´Ã¼·Î ¸¸µé¾îÁ®¾ß ÇÒ °ÍÀÔ´Ï´Ù. »Ó¸¸ ¾Æ´Ï¶ó, ChatServerÀÇ addClient()¸Þ¼­µå¸¦ ÅëÇØ ³Ñ°ÜÁö´Â ChatClient ¿ª½Ã, ChatServer°¡ ÄÝ ¹é ¸Þ¼­µå¸¦ È£ÃâÇØ¾ß Çϱ⠶§¹®¿¡ RMI ¿ø°Ý °´Ã¼·Î ¸¸µé¾îÁ®¾ß ÇÕ´Ï´Ù.

 

±×·³ ¸ÕÀú, ChatServer¿Í ChatClientÀÇ ÀÎÅÍÆäÀ̽º¸¦ »ìÆì º¸°Ú½À´Ï´Ù.

 

ChatServer.java(ChatServer¿¡ »ç¿ëÇÒ Interface)

import java.lang.String;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface ChatServer extends Remote {

   public void addClient(ChatClient client, String name) throws RemoteException;

   public void disconnect(ChatClient client, String name) throws RemoteException;

   public void say(String msg) throws RemoteException;

}

C:\JavaExample\18>javac ChatServerInterface.java

 

ChatServer ÀÎÅÍÆäÀ̽º´Â RemoteÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹Þ°í, ¿ø°Ý °´Ã¼°¡ ¿ÜºÎ¿¡ ¼­ºñ½ºÇÏ·Á´Â ¸Þ¼­µåµéÀ» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù.

 

addClient()¸Þ¼­µå´Â ¸Å°³ º¯¼ö·Î ³Ñ¾î¿Â Ŭ¶óÀ̾ðÆ®ÀÇ °´Ã¼¿Í À̸§À» ´ëÈ­ÀÚ ¸ñ·Ï¿¡ Ãß°¡½Ãŵ´Ï´Ù. disconnect()¸Þ¼­µå´Â ¸Å°³º¯¼ö·Î ³Ñ¾î¿Â °´Ã¼¿Í À̸§Àº ´ëÈ­ÀÚ ¸ñ·Ï¿¡¼­ »èÁ¦½Ãŵ´Ï´Ù. say()¸Þ¼­µå´Â Ŭ¶óÀÌ¾ðÆ®µéÀÌ ´ëÈ­ ³»¿ëÀ» ÀÔ·ÂÇÒ ¶§ È£ÃâÇÏ´Â ¸Þ¼­µåÀÔ´Ï´Ù. ÀÌ ¸Þ¼­µå°¡ È£ÃâµÇ¸é ¼­¹ö´Â ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â ¸ðµç Ŭ¶óÀÌ¾ðÆ® °´Ã¼ÀÇ ÄÝ ¹é ¸Þ¼­µå¸¦ È£ÃâÇÕ´Ï´Ù.

 

ChatClient.java(ChatClient¸¦ »ç¿ëÇÒ Interface)

import java.lang.String;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface ChatClient extends Remote {

   public void printMessage(String msg) throws RemoteException;

}

C:\JavaExample\18>javac ChatServer.java

 

ChatClient ¿ª½Ã, ChatServer·ÎºÎÅÍ ÄÝ¹é µÇ´Â printMessage()¸Þ¼­µå¸¦ ¿ø°ÝÀ¸·Î Á¦°øÇϱâ À§ÇØ RemoteÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹Þ¾Æ¾ß ÇÕ´Ï´Ù. »ç½Ç Ŭ¶óÀÌ¾ðÆ®´Â printMessage()¸Þ¼­µå ¿Ü¿¡µµ ½ÇÁ¦ »ç¿ëÀÚ¿ÍÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇØ ´Ù¸¥ ¸Þ¼­µåµéµµ °¡Áö°í ÀÖÀ» Å×Áö¸¸, ChatServer¿¡°Ô º¸¿©Áö´Â ¸Þ¼­µå´Â printMessage()¸Þ¼­µå Çϳª»ÓÀ̹ǷÎ, ÀÌ ¸Þ¼­µå Çϳª¸¸ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. printMessage()¸Þ¼­µå´Â ¼­¹ö·ÎºÎÅÍ È£Ã⠹޾Ƽ­, »ç¿ëÀÚ¿¡°Ô ¸Þ½ÃÁö¸¦ Ãâ·ÂÇØ ÁÝ´Ï´Ù.

 

 ´ÙÀ½Àº ChatServerÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ChatServerImplŬ·¡½ºÀÔ´Ï´Ù.

 

ChatServerImpl.java(ChatServerÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ChatServerImplŬ·¡½º)

import java.rmi.*;

import java.rmi.server.*;

import java.util.*;

public class ChatServerImpl extends UnicastRemoteObject implements ChatServer {

   Vector clientList = new Vector();

   public ChatServerImpl() throws RemoteException{}

   public static void main(String args[]){

       try{

          System.out.println("ChatServerImpl.main:creating registry");

          ChatServerImpl Server = new ChatServerImpl();        

          Naming.rebind("RMIChatServer", Server);

          System.out.println("ChatServerImpl is running...");

       } catch (Exception e){

          System.out.println("ChatServerImpl error: " + e.getMessage());

          e.printStackTrace();

       }

   }

   public void addClient(ChatClient client, String name) throws RemoteException{

       clientList.addElement(client);

       say(name + "´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.");

       System.out.println("New Client! Number of client = " + (clientList.size()));

   }

   public void disconnect(ChatClient client, String name) throws RemoteException{

       int i = clientList.indexOf(client);

       if (i >= 0){

          say(name + "´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.");

          clientList.removeElementAt(i);

          System.out.println("A Client exited! Number of client = " + clientList.size());

         

       }else {

          System.out.println("No such a client in Server! ");

       }

   }

   public void say(String msg) throws RemoteException {

       int numOfConnect = clientList.size();

       for(int i = 0; i < numOfConnect; i++){

          ((ChatClient)clientList.elementAt(i)).printMessage(msg);

       }

   }

}

C:\JavaExample\18>javac ChatServerImpl.java

 

ChatServerImplŬ·¡½º´Â ChatServerÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇ µÇ¾î ÀÖ´Â ¸ðµç ¸Þ¼­µåµéÀ» ½ÇÁ¦·Î ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ChatServerImplÀº clientList¶ó°í ÇÏ´Â java.util.VectorŬ·¡½º¸¦ ¸â¹ö º¯¼ö·Î °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ Vector¿¡´Â ´ëÈ­¿¡ Âü¿©ÇÏ´Â »ç¶÷µéÀÇ ¸ñ·ÏÀÌ ÀúÀåµË´Ï´Ù. ChatClient°¡ addClient¸Þ¼­µå¸¦ ÅëÇØ¼­ °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ³Ñ°ÜÁÖ¸é, ±× ÂüÁ¶ÀÚ¸¦ clientList¶ó´Â Vector¿¡ ÀúÀåÇϰí ÀÖ´Â °ÍÀÔ´Ï´Ù.

 

n        clientList.addElement(client);

 

disconnect()¸Þ¼­µå´Â Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÀ» ²÷¾úÀ» ¶§ È£ÃâµÇ¾î Ŭ¶óÀÌ¾ðÆ®°¡ º¸³»¿Â ChatClientŸÀÔÀÇ ÂüÁ¶¸¦ clientList¿¡¼­ »èÁ¦¸¦ ÇÕ´Ï´Ù.

 

n        clientList.removeElementAt(i);

 

say()¸Þ¼­µå´Â ¸Å°³ º¯¼ö·Î ³Ñ°Ü ¹ÞÀº ¸Þ½ÃÁö¸¦ clientList¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¸ðµç Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô Àü¼ÛÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ¶§ ¸Þ½ÃÁö¸¦ Àü¼ÛÇϱâ À§ÇØ »ç¿ëµÇ´Â °ÍÀÌ ¹Ù·Î, ChatClientÀÇ Äݹé¸Þ¼­µåÀÎ printMessage()¸Þ¼­µåÀÔ´Ï´Ù. clientList¿¡ ÀúÀåµÇ¾î Àִ  ChatClient ¿ª½Ã ¿ø°Ý °´Ã¼·Î ¸¸µé¾î Á³±â ¶§¹®¿¡, ChatServer´Â ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â ChatClient°´Ã¼ÀÇ ¿ø°Ý ÂüÁ¶ÀÚ¸¦ »ç¿ëÇØ¼­ ChatClientŬ·¡½ºÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

n        ((ChatClient)clientList.elementAt(i)).printMessage(msg);

 

clientList°¡ °¡Áö°í ÀÖ´Â ChatClient ¸ñ·Ï¿¡¼­ Â÷·Ê´ë·Î ²¨³»¿Í printMessage()¸Þ¼­µå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù. ÀÌ ¶§ Vector Ŭ·¡½ºÀÇ elementAt()¸Þ¼­µå´Â Object Ŭ·¡½º ŸÀÔÀ» ¹ÝȯÇϱ⠶§¹®¿¡, ¹Ýµå½Ã ChatClient ÀÎÅÍÆäÀ̽º ÇüÅ·ΠÇü º¯È¯À» ÇØÁÖ¼Å¾ß ÇÕ´Ï´Ù.

 

ChatServer°¡ ÇÏ´Â ÀÏÀ» º¸´Ù ½±°Ô ÀÌÇØÇϱâ À§ÇØ, ´ÙÀ½ ±×¸²À» ÂüÁ¶ÇϽʽÿÀ.

 

±×¸² 18‑13 addClient()¸Þ¼­µå°¡ clientList¶ó´Â Vector¿¡ ChatClientÀÇ ÂüÁ¶ÀÚ¸¦ ÀúÀå

±×¸² 18‑14 disconnect()¸Þ¼­µå°¡ clientList¶ó´Â Vector¿¡ ChatClientÀÇ ÂüÁ¶ÀÚ¸¦ »èÁ¦

±×¸² 18‑15 say()¸Þ¼­µå°¡ ChatClient¿¡°Ô ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ´Â ¸ð½À

¸¶Áö¸·À¸·Î ChatClientÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ChatClientImplÀ» »ìÆì º¸°Ú½À´Ï´Ù. ¿ì¸®°¡ ¸¸µé ChatClientImplŬ·¡½º´Â Å©°Ô µÎ °¡Áö ÀÏÀ» ¼öÇà ÇÕ´Ï´Ù. Çϳª´Â, Naming.lookup()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ChatServerÀÇ ¿ø°Ý °´Ã¼¸¦ ¾ò¾î¿À°í, addClient()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ÀÚ½ÅÀ» µî·ÏÇÏ´Â ÀÏÀÔ´Ï´Ù. ´Ù¸¥ Çϳª´Â, »ç¿ëÀڷκÎÅÍ ¸Þ½ÃÁö¸¦ ÀÔ·Â ¹Þ¾Æ¼­ ChatServer¿¡°Ô Àü¼ÛÇϰí, ChatServer·ÎºÎÅÍ Àü¼Û ¹ÞÀº ¸Þ½ÃÁö¸¦ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÖ´Â ÀÏÀÔ´Ï´Ù. ½ÇÁ¦ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ºÎºÐÀº AWT¸¦ »ç¿ëÇØ¼­ ±×·¡ÇÈ Ã³¸®ÇÏ¿´½À´Ï´Ù.

 

 ´ÙÀ½Àº ChatClientImplŬ·¡½ºÀÇ Àüü ÄÚµå ÀÔ´Ï´Ù.

 

ChatClientImpl.java

import java.rmi.*;

import java.rmi.server.*;

import java.io.*;

public class ChatClientImpl extends UnicastRemoteObject implements ChatClient, Runnable {

   private ChatServer server = null;

   protected static String name = null;

   public ChatClientImpl(String name) throws RemoteException, Exception {

       this.name = name;   

       server = (ChatServer)Naming.lookup("//localhost/RMIChatServer");  

    server.addClient(this,name);

   } 

   public void printMessage(String msg) throws RemoteException {

       System.out.println(msg);    

   } 

   public void run() {

       BufferedReader br = null;

       try {

          br = new BufferedReader(new InputStreamReader(System.in));

          String message = null;

          while ((message = br.readLine())!= null) {

             server.say(""+ name +" : " + message); 

             if(message.equals("exit")){                 

                server.disconnect(this, name);  

             }                  

          }

       }catch(Exception e) {

          System.out.println(e);

       }     

   } 

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

       new Thread(new ChatClientImpl(args[0])).start();       

   }

}

C:\JavaExample\18>javac ChatServerImpl.java

 

ChatClientImplŬ·¡½ºÀÇ »ý¼ºÀÚ´Â ChatServerÀÇ ¿ø°Ý °´Ã¼ ÂüÁ¶ÀÚ¸¦ ¾ò¾î¿Í¼­ server¶ó´Â ¸â¹ö º¯¼ö¿¡ ÀúÀåÇÕ´Ï´Ù.

 

n        server = (ChatServer)Naming.lookup(¡°//localhost/ChatServer¡±);

 

ChatServerÀÇ ¿ø°Ý ÂüÁ¶ÀÚ¸¦ ¾ò¾î¿Â ´ÙÀ½, »ý¼ºÀÚ´Â ´Ù½Ã ChatServerÀÇ addClient()¸Þ¼­µå¸¦ È£ÃâÇÔÀ¸·Î½á ÀÚ½ÅÀ» µî·ÏÇÕ´Ï´Ù.

 

n        server.addClient(this);

 

ÀÌ·¸°Ô ChatServer¿¡ µî·ÏÀÌ µÇ°í ³ª¸é, printMessage¸¦ È£Ãâ ¹ÞÀ½À¸·Î ÀÎÇØ ChatServer·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ Àü¼Û ¹Þ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. »ç½Ç printMessage()¸Þ¼­µå´Â ÄÜ¼Ö Ã¢¿¡ ChatServer·ÎºÎÅÍ Àü¼Û ¹ÞÀº ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ »ÓÀ̰í, ½ÇÁ¦ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °ÍÀº ChatServer Ŭ·¡½ºÀÇ say()¸Þ¼­µåÀÔ´Ï´Ù.

 

»ç¿ëÀڷκÎÅÍ ¸Þ½ÃÁö¸¦ ÀÔ·Â ¹Þ´Â ºÎºÐÀº ChatServer·ÎºÎÅÍ Àü¼Û ¹ÞÀº ¸Þ½ÃÁö¸¦ Äֿܼ¡ Ãâ·ÂÇÏ´Â Àϰú º´·ÄÀûÀ¸·Î 󸮵Ǿî¾ß Çϱ⠶§¹®¿¡ java.lang.Runnable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¼­ ¾²·¹µå 󸮸¦ ÇØ¾ß ÇÕ´Ï´Ù. ½ÇÁ¦·Î run()¸Þ¼­µå¸¦ »ìÆìº¸¸é, Ç¥ÁØ ÀÔ·Â ½ºÆ®¸²ÀÎ, System.in ½ºÆ®¸²À¸·ÎºÎÅÍ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ°í ÀÖ½À´Ï´Ù. »ç¿ëÀÚ°¡ ¾î¶² ¸Þ½ÃÁö¸¦ ÀÔ·ÂÇß´Ù¸é ±× ¸Þ½ÃÁö´Â ¼­¹ö¿¡ Àü¼ÛµÇ¾î¾ß ÇÕ´Ï´Ù.

 

n        server.say(message);

 

 »ç¿ëÀÚ°¡ äÆÃ¹æ¿¡¼­ ÅðÀåÀ» ÇÏ°í ½ÍÀ» ¶§ ÀÔ·Ââ¿¡ ¡®exit¡¯¸¦ Ä¡¸é Å»ÅðÇÏ¿´´Ù´Â ¸Þ½ÃÁö°¡ Ãâ·ÂµË´Ï´Ù. addClient()¸Þ¼­µå¿Í ¸¶Âù°¡Áö·Î ChatServerÀÇ ¿ø°Ý ÂüÁ¶ÀÚ¸¦ ¾ò¾î¿Â ´ÙÀ½, »ý¼ºÀÚ´Â ´Ù½Ã ChatServerÀÇ disconnect()¸Þ¼­µå¸¦ È£ÃâÇÔÀ¸·Î½á ÀÚ½ÅÀ» µî·ÏÇÕ´Ï´Ù.

 

n        server.disconnect(this, name);

 

ÀÌÁ¦ ChatServerImpl°ú ChatClientImplŬ·¡½º¸¦ ¸¸µé¾úÀ¸´Ï ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¿øÇÒÇÑ ´ëÈ­¸¦ À§ÇØ °¢°¢ÀÇ Stub/SkeletonÀ» »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.

 

C:\JavaExample\18>rmic ChatServerImpl

C:\JavaExample\18>rmic ChatClientImpl

C:\JavaExample\18>dir

¡¦

ChatServerImpl_Stub.class

ChatServerImpl_Skel.class

ChatClientImpl_Stub.class

ChatClientImpl_Skel.class

¡¦.

 

 ¸ðµç Áغñ°¡ ´Ù µÆÀ¸´Ï ½ÇÁ¦·Î ChatServerImpl°ú ChatClientImplÀ» ½ÇÇàÇØ¼­ µ¿ÀÛÀ» È®ÀÎÇØ º¸°Ú½À´Ï´Ù. ¸ÕÀú RMI Registry¸¦ ½ÇÇàÇÏ¿©¾ß ÇÕ´Ï´Ù

 

C:\JavaExample\18> rmiregistry

 

±× ´ÙÀ½À¸·Î ChatServerImplŬ·¡½º¸¦ ½ÇÇà½Ãŵ´Ï´Ù.

 

C:\JavaExample\18> java ChatServerImpl

ChatServerImpl.main:creating registry

ChatServerImpl is running...

 

äÆÃÀ» º¸±âÀ§ÇØ µÎ°³ÀÇ Ã¢À» ¶ç¿ö¼­ ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. ÀÔ·Ââ¿¡ ¡®exit¡¯¸¦ Ä¡¸é äÆÃÀ» Á¾·áÇÏ°Ô µË´Ï´Ù.

 

C:\JavaExample\18>java ChatClientImpl hoho

hoho´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.

hi!!

hoho : hi!!

haha´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.

haha : hoho

haha : hihi

hoho : hoho

exit

hoho : exit

hoho´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.

 

C:\JavaExample\18>java ChatClientImpl haha

haha´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.

haha : hoho

haha : hihi

hoho : hoho

hoho : exit

hoho´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.

exit

haha : exit

haha´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.

 

¸¶Áö¸·À¸·Î ¸ðµç clientµéÀÌ Ã¤ÆÃÀ» ¸¶Ä¡°í äÆÃ¹æ¿¡¼­ ³ª¿Ô½À´Ï´Ù. ¼­¹ö â¿¡¼­ clientµéÀÌ Á¢¼ÓÇϰí ÅðÀåÀ» ÇÒ ¶§ ¾î¶² º¯È­°¡ ÀϾ´ÂÁö È®ÀÎÇØ º¸°Ú½À´Ï´Ù.

 

C:\downloads\chat>java ChatServerImpl

ChatServerImpl.main:creating registry

ChatServerImpl is running...

New Client! Number of client = 1

New Client! Number of client = 2

A Client exited! Number of client = 1

A Client exited! Number of client = 0

 

 

°£´ÜÇÏ°Ô RMI¿¡¼­ ÄÝ ¹é ±â¹ýÀ» »ç¿ëÇØ¼­ äÆÃ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù. »ç½Ç ÀÌ Ã¤ÆÃ ÇÁ·Î±×·¥Àº Thread»ç¿ë½Ã µ¿±âÈ­ 󸮶óµçÁö, ½ºÆ®¸² »ç¿ë Áß ¹ß»ýÇÏ´Â ¿¹¿Ü»óȲ¿¡ ´ëÇÑ Ã³¸®°°ÀÌ ¸¹Àº ºÎºÐÀ» »ý·«Çϰí ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ºÎºÐÀº ¿©·¯ºÐµéÀÌ Á÷Á¢ ¿¬½À »ï¾Æ ¸¸µé¾î º¸½Ã±â ¹Ù¶ø´Ï´Ù. ¼ÒÄÏÀ» »ç¿ëÇØ¼­ ÀÛ¼ºÇß´ø äÆÃ ÇÁ·Î±×·¥¿¡ ºñÇØ¼­ RMI¸¦ »ç¿ëÇØ ¸¸µé °æ¿ì, ¼­¹ö¿¡ ¸Þ½ÃÁö¸¦ Àü¼ÛÇϰí, ¼­¹ö·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ Àü¼Û ¹Þ´Â ºÎºÐÀÌ ´Ü¼øÈ÷ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â ¼öÁØÀ¸·Î±îÁö Ãß»óÈ­ µË´Ï´Ù. ÇÏÁö¸¸ »ç½Ç äÆÃ ÇÁ·Î±×·¥Ã³·³, ³×Æ®¿öÅ©·Î ÁÖ°í ¹Þ´Â ¸Þ½ÃÁö°¡ ºó¹øÇÏ°Ô ¹ß»ýÇÒ °æ¿ì, RMIÀÇ ¸Þ¼­µå È£ÃâÀº ¿À¹öÇìµå°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù. ÄÝ ¹é ±â¹ýÀº Áõ±Ç ÇöȲÀ» »ç¿ëÀڵ鿡°Ô µ¿ÀûÀ¸·Î ¾Ë·ÁÁÖ´Â °æ¿ì À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

 

¢Ñ  Call Back

Ŭ¶óÀÌ¾ðÆ®´Â ¸Þ½ÃÁö¸¦ º¸³»±â¸¸Çϰí, ¼­¹ö¿¡¼­´Â ¹ÞÀº ¸Þ½ÃÁö¸¦ Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô º¸³»Áֱ⸸ÇÑ´Ù. ´Ù½Ã¸»Çϸé, ¼­¹öµµ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÖ´Â ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °ÍÀ» ÄݹéÀ̶ó°í ÇÑ´Ù.

 

RemoteObjectÀÇ ÁÖ¿ä »ý¼ºÀÚ¸Þ¼­µå

protected RemoteObject() : RemoteObject¸¦ ÀÛ¼ºÇÑ´Ù.

protected RemoteObject(RemoteRef newref) : ÁöÁ¤µÈ RemoteRef¸¦ »ç¿ëÇØ ÃʱâÈ­ÇØ, RemoteObject¸¦ ÀÛ¼ºÇÑ´Ù.

 

RemoteObjectÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public RemoteRef getRef() : RemoteObject¿¡ ´ëÇÑ ÂüÁ¶°ªÀ» ¹ÝȯÇÑ´Ù.

public static Remote toStub(Remote obj) : ÆÄ¶ó¹ÌÅͷμ­ °Ç³×¹ÞÀº obj¿¡ ´ëÇÑ stub¸¦ ¹ÝȯÇÑ´Ù.

 

RemoteServerÀÇ ÁÖ¿ä »ý¼ºÀÚ¸Þ¼­µå

protected RemoteServer() : RemoteServer ¸¦ »ý¼ºÇÑ´Ù.

protected RemoteServer(RemoteRef ref) : refÇüŸ¦ ÁöÁ¤ÇØ RemoteServer ¸¦ »ý¼ºÇÑ´Ù.

 

RemoteServerÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public static String getClientHost() : ÇöÀç Ŭ¶óÀ̾ðÆ®ÀÇ È£½ºÆ® ³×ÀÓÀ» StringÇüÅ·Π¹ÝÈ¯ÇØ ÁØ´Ù. ¸¸¾à RMI°¡ Ȱ¼ºÈ­ µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡ È£Ã⠵ȴٸé, ServerNotActivationExceptionÀÌ ¹ß»ýÇÑ´Ù.

public static void setLog(OutputStream out) : ÁÖ¾îÁø OutputStream¿¡´Ù°¡, ¿ÜºÎ¿¡¼­ RMI È£ÃâÀÌ ¹ß»ýÇÏ´Â °æ¿ì À̸¦ ±â·ÏÇØ ÁØ´Ù. FileOutputStream°°Àº °ÍÀ» »ç¿ëÇϸé ÅØ½ºÆ® Çü½ÄÀ¸·Î ·Î±×¸¦ ³²±â´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÁÖ¾îÁø OutputStreamÀÌ nullÀÎ °æ¿ì ·Î±× ±â´ÉÀº ½ÇÇàµÇÁö ¾Ê´Â´Ù.

public static PrintStream getLog() : setLog()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ÇöÀç RMIÀÇ È£ÃâÀ» ±â·ÏÇϱâ À§ÇØ ¼³Á¤ÇØÁØ OutputStreamÀ» ¹ÝÈ¯ÇØ ÁØ´Ù. ·Î±×¿¡ Ãß°¡ÀûÀÎ Á¤º¸¸¦ ±â·ÏÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù.

 

UnicastRemoteObjectÀÇ ÁÖ¿ä »ý¼ºÀÚ¸Þ¼­µå

protected UnicastRemoteObject() : ÀÍ¸í Æ÷Å並 »ç¿ëÇØ, »õ·Î¿î UnicastRemoteObject¸¦ »ý¼ºÇÑ´Ù.

protected UnicastRemoteObject(int port) : ÁöÁ¤µÈ Æ÷Å並 »ç¿ëÇØ, »õ·Î¿î UnicastRemoteObject¸¦ »ý¼ºÇÑ´Ù.

protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) : ÁöÁ¤µÈ Æ÷Åä¿Í ¼ÒÄÏ ÆÑÅ丮¸¦ »ç¿ëÇØ, »õ·Î¿î UnicastRemoteObject¸¦ »ý¼ºÇÑ´Ù.

port - RemoteObject°¡ È£ÃâÀ» ¼ö½ÅÇÏ´Â Æ÷ÅäÀÇ ¹øÈ£

csf - RemoteObjectÀÇ È£Ãâ¿¡ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®Ãø ¼ÒÄÏ ÆÑÅ丮

ssf - RemoteObject È£ÃâÀ» ¼ö½ÅÇÏ´Â ¼­¹öÃø ¼ÒÄÏ ÆÑÅ丮

 

UnicastRemoteObjectÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public static RemoteStub exportObject(Remote obj) : ¸®¸ðÆ® ¿ÀºêÁ§Æ®°¡ ÇöÀç ºñ¾îÀÖ´Â ÀÓÀÇÀÇ Æ÷Æ®¿¡¼­ ´ë±âÇϰí ÀÖÀ½À» ¿ÜºÎ¿¡ ¾Ë¸°´Ù.

public static Remote exportObject(Remote obj, int port) : ¸®¸ðÆ® ¿ÀºêÁ§Æ®°¡ ÇöÀç ÁöÁ¤µÈ Æ÷Æ®¿¡¼­ ´ë±âÇϰí ÀÖÀ½À» ¿ÜºÎ¿¡ ¾Ë¸°´Ù. 

obj - ´ë±âÇÏ´Â ¸®¸ðÆ® ¿ÀºêÁ§Æ®

port - ÁöÁ¤µÈ Æ÷Æ®¹øÈ£

public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) : ¸®¸ðÆ® ¿ÀºêÁ§Æ®°¡ ÁöÁ¤µÈ Æ÷Æ®¿¡¼­ Ä¿½ºÅÒ ¼ÒÄÏ ÆÑÅ丮 client¿Í server¸¦ »ç¿ëÇÏ¿© ´ë±âÇϰí ÀÖÀ½À» ¿ÜºÎ¿¡ ¾Ë¸°´Ù.

obj - ´ë±âÇÏ´Â ¸®¸ðÆ® ¿ÀºêÁ§Æ®

port - ¿ÀºêÁ§Æ®ÀÇ exportóÀÇ Æ÷Åä

csf - ¸®¸ðÆ® ¿ÀºêÁ§Æ®ÀÇ È£Ãâ¿¡ »ç¿ëÇÏ´Â, Ŭ¶óÀ̾ðÆ®Ãø ¼ÒÄÏ ÆÑÅ丮

ssf - ¸®¸ðÆ® ¿ÀºêÁ§Æ® È£ÃâÀ» ¼ö½ÅÇÏ´Â, ¼­¹öÃø ¼ÒÄÏ ÆÑÅ丮

public static boolean unexportObject(Remote obj, boolean force) : ÁÖ¾îÁø ¿ø°Ý°´Ã¼ object°¡ ´õÀÌ»ó À¯È¿ÇÏÁö ¾ÊÀ½À» ¿ÜºÎ¿¡ ¾Ë¸°´Ù. ¸¸¾à È£Ãâ¿¡ ¼º°øÀ» Çϸé true°ªÀÌ ¹ÝȯµË´Ï´Ù. °´Ã¼°¡ ÇöÀç »ç¿ëÁßÀÎ °æ¿ì, ÀÛ¾÷À» °­Á¦·Î ¼öÇàÇ϶ó´Â °ÍÀ» ³ªÅ¸³»´Â force ¸Å°³º¯¼ö°¡ false°ªÀ» °®´Â´Ù¸é ÀÌ È£ÃâÀº ½ÇÆÐÇÒ °ÍÀÌ´Ù. ¸Þ¼­µå È£ÃâÀÌ ¼º°øÇÑ ÀÌÈÄ, °´Ã¼´Â ´õ ÀÌ»ó ¿ø°Ý¸Þ¼­µå È£ÃâÀ» ¹Þ¾ÆµéÀÏ ¼ö ¾ø°Ô µÈ´Ù.

 

NamingÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public static Remote lookup(String name) : ÁöÁ¤µÈ name¿¡ °ü·ÃÇÑ ¸®¸ðÆ® ¿ÀºêÁ§Æ®ÀÇ ÂüÁ¶¸¦ ¹ÝȯÇÑ´Ù.  

name - ¸®¸ðÆ® ¿ÀºêÁ§Æ®ÀÇ URL Çü½ÄÀÇ À̸§

public static void bind(String name, Remote obj) : ÁöÁ¤µÈ name¸¦ ¸®¸ðÆ® ¿ÀºêÁ§Æ®¿¡ ¹ÙÀεåÇÑ´Ù.

name - ¸®¸ðÆ® ¿ÀºêÁ§Æ®ÀÇ URL Çü½ÄÀÇ À̸§

obj - ¸®¸ðÆ® ¿ÀºêÁ§Æ®ÀÇ °´Ã¼¸í

public static void unbind(String name) : ¸®¸ðÆ® ¿ÀºêÁ§Æ®¿¡ °ü·ÃÇÑ ÁöÁ¤µÈ À̸§¿¡ ´ëÇÑ ¹ÙÀεùÀ» ÇØÁ¦ÇÑ´Ù.

name - ¸®¸ðÆ® ¿ÀºêÁ§Æ®¿¡ °ü·ÃÇÑ URL Çü½ÄÀÇ À̸§

public static void rebind(String name, Remote obj) : ÁöÁ¤µÈ À̸§À» »õ·Î¿î ¸®¸ðÆ® ¿ÀºêÁ§Æ®¿¡ ¹ÙÀε带 ´Ù½Ã ÇÑ´Ù.

name - ¸®¸ðÆ® ¿ÀºêÁ§Æ®¿¡ °ü·ÃÇÑ URL Çü½ÄÀÇ À̸§

obj - À̸§¿¡ °ü·ÃÇÑ »õ·Î¿î ¸®¸ðÆ® ¿ÀºêÁ§Æ®

public static String[] list(String name) : ·¹Áö½ºÆ®¸®³»ÀÇ ¹ÙÀεåµÇ¾î ÀÖ´Â À̸§ÀÇ ¹è¿­À» ¹ÝȯÇÑ´Ù.

name - ¸®¸ðÆ® ·¹Áö½ºÆ®¸®¸¦ ÁöÁ¤ÇÏ´Â URL Çü½ÄÀÇ À̸§

 

LocateRegistryÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public static Registry getRegistry() : µðÆúÆ®ÀÇ ·¹Áö½ºÆ®¸® Æ÷ÅäÀÎ 1099¹ø Æ÷Å並 »ç¿ëÇÏ´Â ·ÎÄà ȣ½ºÆ®¿ëÀÇ ¸®¸ðÆ® ¿ÀºêÁ§Æ® Registry¿¡ ÂüÁ¶¸¦ ¹ÝȯÇÑ´Ù.

public static Registry getRegistry(int port) : ÁöÁ¤µÈ port ¸¦ »ç¿ëÇÏ´Â ·ÎÄà ȣ½ºÆ®¿ëÀÇ ¸®¸ðÆ® ¿ÀºêÁ§Æ® Registry¿¡ ÂüÁ¶¸¦ ¹ÝȯÇÑ´Ù.

port - ·¹Áö½ºÆ®¸®°¡ ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Æ÷Åä

public static Registry getRegistry(String host) : µðÆúÆ® ·¹Áö½ºÆ®¸® Æ÷ÅäÀÎ 1099¹ø Æ÷Å並 »ç¿ëÇØ, ÁöÁ¤µÈ È£½ºÆ®»ó¿¡¼­ µ¿ÀÛÇÏ´Â, ¸®¸ðÆ® ¿ÀºêÁ§Æ® Registry¿¡ ÂüÁ¶¸¦ ¹ÝȯÇÕ´Ï´Ù. host°¡ nullÀÇ °æ¿ì´Â, ·ÎÄà ȣ½ºÆ®°¡ »ç¿ëµÈ´Ù.

host - ¸®¸ðÆ® ·¹Áö½ºÆ®¸®ÀÇ È£½ºÆ®

public static Registry getRegistry(String host, int port) : ÁöÁ¤µÈ port¸¦ »ç¿ëÇØ, ÁöÁ¤µÈ È£½ºÆ®»ó¿¡¼­ µ¿ÀÛÇÏ´Â, ¸®¸ðÆ® ¿ÀºêÁ§Æ® Registry¿¡ÀÇ ÂüÁ¶¸¦ ¹ÝȯÇÕ´Ï´Ù. host°¡ null ÀÇ °æ¿ì´Â, ·ÎÄà ȣ½ºÆ®°¡ »ç¿ëµÈ´Ù.

host - ¸®¸ðÆ® ·¹Áö½ºÆ®¸®ÀÇ È£½ºÆ®

port - ·¹Áö½ºÆ®¸®°¡ ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Æ÷Åä

public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) : ÁöÁ¤µÈ port¸¦ »ç¿ëÇØ, ÁöÁ¤µÈ È£½ºÆ®»ó¿¡¼­ µ¿ÀÛÇÏ´Â, ¸®¸ðÆ® ¿ÀºêÁ§Æ® Registry¿¡ÀÇ ·ÎÄÿ¡ ÀÛ¼ºµÈ ¿ø°ÝÂüÁ¶ÀÚ¸¦ ¹ÝȯÇÑ´Ù.

host - ¸®¸ðÆ® ·¹Áö½ºÆ®¸®ÀÇ È£½ºÆ®

port - ·¹Áö½ºÆ®¸®°¡ ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Æ÷Åä

csf - ·¹Áö½ºÆ®¸®¿¡ÀÇ Á¢¼ÓÀ» Çϱâ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø Socket ÆÑÅ丮.

public static Registry createRegistry(int port) : ·ÎÄà ȣ½ºÆ®»ó¿¡, ÁöÁ¤µÈ port·Î ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Registry¸¦ ÀÛ¼ºÇØ ÀÛµ¿ÇÑ´Ù.

port - ·¹Áö½ºÆ®¸®°¡ ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Æ÷Åä

public static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) : ·ÎÄà ȣ½ºÆ®¿¡°Ô Registry¸¦ »ý¼ºÇϰí ÀÛµ¿ÇÑ´Ù. ·ÎÄà ȣ½ºÆ®´Â, ÀÌ ·¹Áö½ºÆ®¸®¿ÍÀÇ Åë½Å¿¡ Ä¿½ºÅÒÀÇ ¼ÒÄÏ ÆÑÅ丮¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÛ¼ºµÈ ·¹Áö½ºÆ®¸®´Â, °Ç³×¹ÞÀº RMIServerSocketFactory ¿¡ ÀÇÇØ ÀÛ¼ºµÈ ServerSocket¸¦ »ç¿ëÇØ, ÁöÁ¤µÈ port·Î Âø½Å ¿ä±¸¿¡ ´ë±âÇÑ´Ù. ÀÌ ·¹Áö½ºÆ®¸®¿¡ÀÇ ÂüÁ¶¸¦ ¹ÞÀº Ŭ¶óÀÌ¾ðÆ®´Â, °Ç³×¹ÞÀº RMIClientSocketFactory¿¡ ÀÇÇØ ÀÛ¼ºµÈ Socket¸¦ »ç¿ëÇÑ´Ù.

port - ·¹Áö½ºÆ®¸®°¡ ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â Æ÷Åä

csf - ·¹Áö½ºÆ®¸®¿¡ÀÇ Á¢¼ÓÀ» È®¸³ Çϱâ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø SocketÆÑÅ丮

ssf - ·¹Áö½ºÆ®¸®¿¡ÀÇ Á¢¼ÓÀ» ¹Þ¾ÆµéÀ̱â À§ÇÑ ¼­¹öÃø ServerSocketÆÑÅ丮

 

RMISocketFactoryÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼­µå

public abstract Socket createSocket(String  host, int port) : ÁöÁ¤µÈ È£½ºÆ®¿Í Æ÷Æ®¿¡ Á¢¼ÓµÇ´Â Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏÀ» ÀÛ¼ºÇÑ´Ù.

public abstract ServerSocket createServerSocket(int port) : ÁöÁ¤ Æ÷Åä¿ëÀÇ ¼­¹ö ¼ÒÄÏÀ» ÀÛ¼ºÇÕ´Ï´Ù. Æ÷Åä0 Àº ÀÍ¸í Æ÷Å並 ³ªÅ¸³½´Ù.

public static void setSocketFactory(RMISocketFactory fac) : »õ ¼ÒÄÏ ÆÑÅ丮¸¦ ¼³Ä¡ÇÕ´Ï´Ù. ÀÌÈÄ¿¡ ÀÌ ÀÚ¹Ù °¡»ó ¸Ó½Å¿¡¼­ RMI ¼ÒÄÏÀ» »ý¼ºÇÒ °æ¿ì, ÀÌ Å¬·¡½º°¡ »ç¿ëµÉ °ÍÀÌ´Ù. ¸¸¾à ¼ÒÄÏ ÆÑÅ丮°¡ ¼³Ä¡µÇÁö ¾Ê¾Ò´Ù¸é, 3tier¹æ½ÄÀÌ ±âº»À¸·Î »ç¿ëµÈ´Ù. RMI ¼ÒÄÏ ÆÑÅ丮´Â, 1ȸ ¹Û¿¡ »ý¼ºÇÒ ¼ö ¾ø´Ù. RMISocketFactory´Â ÇöÀçÀÇ º¸¾È ¸Å´ÏÀú°¡ ¼ÒÄÏ ÆÑÅ丮ÀÇ ¼³Á¤À» Çã°¡Çϰí ÀÖ´Â °æ¿ì¿¡ ÇÑÁ¤Çؼ­ »ý¼ºÇÒ ¼ö°¡ ÀÖ´Ù°í ÇÏ´Â Á¡¿¡ ÁÖÀÇÇ϶ó. Çã°¡µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¿¡´Â, SecurityException°¡ ¹ß»ýÇÕÇÑ´Ù.

fac - ¼ÒÄÏ ÆÑÅ丮

public static RMISocketFactory getSocketFactory() : setSocketFactory()¸Þ¼­µå¿¡ ÀÇÇØ ¼³Á¤µÈ ¼ÒÄÏ ÆÑÅ丮¸¦ µ¹·ÁÁØ´Ù. ¼ÒÄÏ ÆÑÅ丮°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì´Â null ¸¦ µ¹·ÁÁØ´Ù.

public static RMISocketFactory getDefaultSocketFactory() : 3tier¹æ½ÄÀÇ ±âº» RMI¼ÒÄÏ ÆÑÅ丮¸¦ ¹ÝȯÇÑ´Ù.

public static void setFailureHandler(RMIFailureHandler fh) : ¼­¹ö ¼ÒÄÏÀÇ ÀÛ¼ºÀÌ ½ÇÆÐÇÒ °æ¿ì¿¡, RMI ÀÇ ·±Å¸ÀÓÀÌ È£ÃâÇÏ´Â ¿¡·¯ Çڵ鷯¸¦ ¼³Ä¡ÇÑ´Ù. µðÆúÆ®¿¡¼­´Â, ¸¸¾à ¿¡·¯ Çڵ鷯°¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê°í, ¼­¹ö ¼ÒÄÏÀÇ ÀÛ¼ºÀÌ ½ÇÆÐÇÒ °æ¿ì¿¡´Â, RMI ·±Å¸ÀÓÀº ¼­¹ö ¼ÒÄÏÀÇ ÀÛ¼ºÀ» Àç½ÇÇàÇÑ´Ù.

fh - ¿¡·¯ Çڵ鷯

public static RMIFailureHandler getFailureHandler() : setFailureHandler()¸Þ¼­µå¿¡ ÀÇÇØ ¼³Á¤µÈ ¼ÒÄÏ ÀÛ¼º ¿¡·¯ Çڵ鷯¸¦ µ¹·ÁÁØ´Ù. ¸¸¾à Çڵ鷯°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é null°ªÀ» ¹ÝȯÇÑ´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ
ÀúÀÚ:ÃÖ¿µ°ü