À̹ø¿¡´Â 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ÀÇ ÁÖ¿ä ¸â¹ö ¸Þ¼µå |
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ºÎ ÀúÀÚ:ÃÖ¿µ°ü |