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ÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå ÀÛ¼ºÀÚ:Àںϸâ¹ö ÀÌÇѼö |