RMI¸¦ ÀÌ¿ëÇÑ Chatting SourceÀÔ´Ï´Ù.


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]

±Û¾´ÀÌ :ÀÌ¿ø¿µ 1998³â 11¿ù 11ÀÏ 14:15:36

In Reply to: [Áú¹®] ¼­¹öÀÇ registry posted by °­½Åµ¿ on 1998³â 11¿ù 06ÀÏ 16:41:41:

¿¹.
server.registry(this) ºÎºÐÀº ÀÓÀÇ·Î ¼­¹öÃø¿¡
Reference¸¦ ³Ñ°ÜÁÖ±âÀ§ÇÑ °Ì´Ï´Ù.
(Method¸íÀÌ ¸¾¿¡ ¾ÈµéÁÒ? register()¶ó°í ÀûÀ» »ý°¢À̾ú´Âµ¥,
ÂÁ, bind()³ª login()µîÀ» »ç¿ëÇÏ¸é µÇ°ÚÁÒ?)


¾Æ·¡´Â RMI¸¦ ÀÌ¿ëÇÑ Chatting ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
¾Õ¿¡¼­ ¸»¾¸µå·È´Ù½ÃÇÇ ÀÌ°ÍÀº Appletviwer³ª
HotJava ºê¶ó¿ìÁ®¿¡¼­¸¸ µË´Ï´Ù.
DNS¿¡ µî·ÏµÇ¾î ÀÖÁö ¾ÊÀº PC¿¡¼­ RMI AppletÀ¸·ÎÀÇ
call back interface´Â ¾ÈµË´Ï´Ù.
ÇÏÁö¸¸ (¾Æ¸¶) Client PC°¡ DNS¿¡ µî·ÏµÇ¾î ÀÖ´Ù¸é µÉ °Ì´Ï´Ù.
ÀüºÎ 5°³ÀÇ ÆÄÀÏÀÔ´Ï´Ù.


1. Files
ChatServer.java, ChatServerImpl.java, Server.java,
ChatClient.java, ChatClientImplApplet.java


2. ½ÇÇàÀýÂ÷
(1) ¸ðµÎ Web Server°¡ ÀÖ´Â ¸Ó½Å¿¡ 5°³ÀÇ ÆÄÀÏÀ» copy
(HotJava¸¦ »ç¿ëÇÏÁö ¾Ê°í appletviewer·Î¸¸ ÇÏ·Á¸é ¾Æ¹«µ¥¼­³ª...)


(2) ChatClientImplApplet.java¿¡¼­ ¼­¹ö lookupÇÒ ¶§
IP AddressºÎºÐ °íħ.(ÄÄÆÄÀÏÇϸé error·Î °É¸²)
(3) javac *.java
(4) rmic ChatServerImpl
(5) rmic ChatClientImplApplet
(6) java Server& (RMI Chat Server¸¦ ½ÇÇà)
----------------
(7) Àû´çÈ÷ code=ChatClientImplApplet width=400, height=300À¸·Î ChatApplet.htmlÆÄÀÏÀ»
¸¸µë.
(8) PCÀÇ HotJava ºê¶ó¿ìÁ®¿¡¼­ À§¿¡¼­ ¸¸µç ChatApplet.htmlÀ» À¥¼­¹ö¸¦ ÅëÇØ
ÀÐ¾î º½.
(9) ȤÀº Appletviewer·Î ÇÏ·Á¸é, À§ÀÇ ¸ðµç ÄÄÆÄÀϵÈ
ÆÄÀÏÀ» PC·Î °¡Á®¿Í¼­ appletviwer ChatApplet.html·Î
Client¸¦ ½ÇÇà. (¿©·¯°³ÀÇ appletviewer·Î º¸¸é ´ëÈ­°¡ °¡´ÉÇÔ)
¹°·Ð ÀÌ·¸°Ô ÇÏ·Á¸é rmi://165.233.225.233:8943/ChatServer¿Í °°ÀÌ
RMI¼­¹öÀÇ À§Ä¡¸¦ ChatClientImplApplet.java¿¡¼­ ¸í½ÃÇØ ÁÖ¾î¾ß ÇÔ.



==================================================
[ChatServer.java]
public interface ChatServer extends java.rmi.Remote
{
boolean login(ChatClient client) throws java.rmi.RemoteException;
void logout(ChatClient client) throws java.rmi.RemoteException;
boolean send(String message) throws java.rmi.RemoteException;
}


==================================================
[ChatServerImpl.java]
import java.rmi.server.*;
import java.rmi.*;
import java.util.*;


public class ChatServerImpl extends java.rmi.server.UnicastRemoteObject implements ChatServer
{
private Vector clients = null;
ChatServerImpl() throws java.rmi.RemoteException
{
super();
clients = new Vector();
}

public boolean login(ChatClient client) throws java.rmi.RemoteException
{
clients.addElement(client);
this.send("*** " + client.getName() + " ´ÔÀÌ µé¾î¿À¼Ì½À´Ï´Ù. ***");
return true;
}
public void logout(ChatClient client) throws java.rmi.RemoteException
{
String name = client.getName();
clients.removeElement(client);
this.send("*** " + name + " ´ÔÀÌ ³ª°¡¼Ì½À´Ï´Ù. ***");
}

public boolean send(String message) throws java.rmi.RemoteException
{
Vector clientsCopy = (Vector)clients.clone();
Enumeration e = clientsCopy.elements();
while(e.hasMoreElements()){
ChatClient client = (ChatClient)e.nextElement();
try {
client.update(message);
}
catch(RemoteException ex){
this.logout(client);
}
}
return true;
}
}


==================================================
[Server.java]
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;
import java.util.*;


public class Server
{
static final int PORT = 8943;
static final String SERVER_NAME = "ChatServer";

public static void main(String argv[])
{
try{
InetAddress address = InetAddress.getLocalHost();
String thisHost = address.getHostAddress();


Properties currentProperties = System.getProperties();
currentProperties.put("java.rmi.server.hostname", thisHost);
System.setProperties(currentProperties);


System.setSecurityManager (new RMISecurityManager());
System.out.print("\nServer.main: creating registry...");
LocateRegistry.createRegistry(PORT);
System.out.println("OK.");

System.out.print("Server.main: creating " + SERVER_NAME + "...");
ChatServer server = new ChatServerImpl();
System.out.println("OK.");


System.out.print("Server.main: binding " + SERVER_NAME + "...");
Naming.rebind("//:" + PORT + "/" + SERVER_NAME , server);
System.out.println("OK.\n");


System.out.println(SERVER_NAME + " ready to continue.");
}
catch (Exception e){
System.out.println("Server.main: An Exceptin occured :" +
e.getMessage());
e.printStackTrace();
}
}
}


==================================================
[ChatClient.java]
public interface ChatClient extends java.rmi.Remote
{
void update(String message) throws java.rmi.RemoteException;
String getName() throws java.rmi.RemoteException;
}


==================================================
[ChatClientImpl.java]
import java.awt.*;
import java.applet.*;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;


import com.sun.java.swing.*;
public class ChatClientImplApplet extends Applet implements ChatClient
{
static final int PORT = 8943;
static final String SERVER_NAME = "ChatServer";
ChatServer server = null;


public void init()
{
setLayout(new CardLayout(0,0));
setSize(456,308);
loginPanel = new java.awt.Panel();
loginPanel.setLayout(null);
loginPanel.setBounds(0,0,456,308);
loginPanel.setBackground(new Color(12632256));
add("loginCard", loginPanel);
loginTextField = new java.awt.TextField();
loginTextField.setBounds(192,120,122,21);
loginPanel.add(loginTextField);
loginButton = new java.awt.Button();
loginButton.setLabel("Login");
loginButton.setBounds(144,156,171,29);
loginButton.setBackground(new Color(12632256));
loginPanel.add(loginButton);
label = new java.awt.Label("ÀÌ ¸§");
label.setBounds(144,120,48,21);
loginPanel.add(label);
titleLabel = new java.awt.Label("Welcome to Chattin Applet",Label.CENTER);
titleLabel.setBounds(72,36,321,36);
titleLabel.setFont(new Font("Dialog", Font.PLAIN, 16));
titleLabel.setForeground(new Color(255));
titleLabel.setBackground(new Color(16776960));
loginPanel.add(titleLabel);
chatPanel = new java.awt.Panel();
chatPanel.setLayout(new BorderLayout(0,0));
chatPanel.setBounds(0,0,456,308);
add("chatCard", chatPanel);
textArea = new java.awt.TextArea();
textArea.setEditable(false);
textArea.setBounds(0,0,456,308);
chatPanel.add("Center", textArea);
messagePanel = new java.awt.Panel();
messagePanel.setLayout(new BorderLayout(0,0));
messagePanel.setBounds(0,285,456,0);
chatPanel.add("South", messagePanel);
nameTextField = new java.awt.TextField();
nameTextField.setText(" ");
nameTextField.setBounds(0,0,81,23);
messagePanel.add("West", nameTextField);
messageTextField = new java.awt.TextField();
messageTextField.setBounds(81,0,375,23);
messagePanel.add("Center", messageTextField);
logoutButton = new java.awt.Button();
logoutButton.setLabel("LogOut");
logoutButton.setBounds(402,0,54,23);
logoutButton.setBackground(new Color(12632256));
messagePanel.add("East", logoutButton);
((CardLayout) getLayout()).show(this,"loginCard");
try {
UnicastRemoteObject.exportObject(this); // <-- export to Remote Object !!
server = null;
}
catch(Exception e){
textArea.append(e.getMessage());
}

SymAction lSymAction = new SymAction();
messageTextField.addActionListener(lSymAction);
loginButton.addActionListener(lSymAction);
logoutButton.addActionListener(lSymAction);
}


public void destroy(){
try{
server.logout(this);
}
catch(Exception e){}
server = null;
}

java.awt.Panel loginPanel;
java.awt.TextField loginTextField;
java.awt.Button loginButton;
java.awt.Label label;
java.awt.Label titleLabel;
java.awt.Panel chatPanel;
java.awt.TextArea textArea;
java.awt.Panel messagePanel;
java.awt.TextField nameTextField;
java.awt.TextField messageTextField;
java.awt.Button logoutButton;

public String getName()
{
return nameTextField.getText().trim();
}

public void update(String message)
{
textArea.append(message + "\n");
}


class SymAction implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent event)
{
Object object = event.getSource();
if (object == messageTextField)
messageTextField_EnterHit(event);
else if (object == loginButton)
loginButton_ActionPerformed(event);
else if (object == logoutButton)
logoutButton_ActionPerformed(event);
}
}


void messageTextField_EnterHit(java.awt.event.ActionEvent event)
{
if ( server == null ) return;
try {
server.send( nameTextField.getText().trim() + " : " + messageTextField.getText() );
messageTextField.setText("");
}
catch(RemoteException e){
textArea.append(e.getMessage());
}
}


void loginButton_ActionPerformed(java.awt.event.ActionEvent event)
{
nameTextField.setText(loginTextField.getText());
textArea.setText("");
messageTextField.setText("");
try {
java.awt.CardLayout cardLayout = (java.awt.CardLayout)getLayout();
cardLayout.show(this,"chatCard");
server = (ChatServer) Naming.lookup(
// "rmi://"+getCodeBase().getHost() + ":" + PORT + "/" + SERVER_NAME);
!!°íÄ¡¼¼¿ä!! "rmi://165.244.227.233:" + PORT + "/" + SERVER_NAME);
server.login(this);
}
catch(Exception e){
textArea.append(e.getMessage());
}
}


void logoutButton_ActionPerformed(java.awt.event.ActionEvent event)
{
try
{
java.awt.CardLayout cardLayout = (java.awt.CardLayout)getLayout();
cardLayout.show(this,"loginCard");
server.logout(this);
}
catch(Exception e){}
server = null;
}
}
=========<end>===============


´ÙÀ½ ±Ûµé:



À̾ ±Û¿Ã¸®±â(´äÇϱâ)

À̸§:
E-Mail:
Á¦¸ñ:
³»¿ë:
HTML ÅÂ±× Æ÷ÇÔ ¿©ºÎ: HTML ¹®¼­ÀÏ °æ¿ì üũ
°ü·Ã URL(¼±ÅÃ):
URL Á¦¸ñ(¼±ÅÃ):
°ü·Ã À̹ÌÁö URL:


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]