¼Ò¼³ java.rmi ¼Ò½ºÄڵ堠RMI äÆÃ  CallBack±â¹ýÀ»»ç¿ëÇÑäÆÃ  

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

ChatServer.java

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:\18>javac ChatServer.java

ChatClient.java

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:\18>javac ChatClient.java

ChatServerImpl.java

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:\18>javac ChatServerImpl.java

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:\18>javac ChatClientImpl.java
C:\18>rmic ChatServerImpl
C:\18>rmic ChatClientImpl

C:\18>rmiregistry

C:\18>java ChatServerImpl
ChatServerImpl.main:creating registry
ChatServerImpl is running...

C:\18>java ChatClientImpl hoho
hoho´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.
hi!!
hoho : hi!!
haha´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.
haha : hoho
haha : exit
haha´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.
exit
hoho : exit
hoho´ÔÀÌ ÅðÀåÇϼ̽À´Ï´Ù.

ÀϹÝÀûÀÎ RMI±â¹ýÀº Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹ö¸¦ È£ÃâÇÏ´Â ´Ü¹æÇ⼺Àε¥ ¹Ý¸é¿¡, call back±â¹ýÀº ¼­¹öµµ Ŭ¶óÀÌ¾ðÆ®¸¦ È£ÃâÇÒ ¼ö ÀÖ´Â ±â¹ýÀÔ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹öÀÇ say()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ±ÛÀ» ÀÔ·ÂÇϸé ÀÚµ¿ÀûÀ¸·Î ¼­¹ö¿¡¼­´Â Ŭ¶óÀ̾ðÆ®ÀÇ printMessage()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© ±ÛÀ» º¸³»ÁÝ´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå
ÀÛ¼ºÀÚ:Àںϸâ¹ö ÀÌÇѼö