¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦17Àå ¼ÒÄÏÇÁ·Î±×·¥  17.6 äÆÃ Ŭ¶óÀÌ¾ðÆ® ±¸Çö  

 

 ´ÙÀ½À¸·Î´Â AWTÀÇ ÇÁ·¹ÀÓÀ» ÀÌ¿ëÇÑ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö´Â ê Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» »ìÆìº¸°Ú½À´Ï´Ù. ±âº»ÀûÀÎ ÀÎÅÍÆäÀ̽º¿Í ¸Þ½ÃÁö ÀÔ·Âó¸® ±×¸®°í, ¼­¹ö·ÎºÎÅÍ ¿À´Â µ¥ÀÌÅÍ Ã³¸®°¡ ÀÌ·ç¾î Áö´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

 

ChatClient.java(Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥)

import java.io.*;

import java.net.*;

import java.util.*;

import java.awt.*;

import java.awt.event.*;

public class ChatClient extends Panel {

   private TextField tfMessage = new TextField();

   private TextArea taContent = new TextArea("Jabook Chatting! (³ª°¡½Ã·Á¸é 'exit'¸¦ ÃÄÁÖ¼¼¿ä)", 30, 50);

   private Socket client = null;

   private BufferedReader br = null;

   private BufferedWriter bw = null;

   public ChatClient(String ip, int port, String id) throws IOException {

       this.setLayout(new BorderLayout());

       this.add("Center", taContent);

       this.add("South", tfMessage);

       taContent.setEditable(false);

       tfMessage.addActionListener(new ActionListener() {

          public void actionPerformed(ActionEvent e) {

             tfMessage_actionPerformed(e);

          }

       });

       try {

          client = new Socket(ip, port);

          br = new BufferedReader(new InputStreamReader(client.getInputStream()));

          bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

          bw.write(id);

          bw.newLine();

          bw.flush();

       } catch (IOException e) {

          System.out.println("Á¢¼Ó ½ÇÆÐ!!");

          throw e;

       }

       SendMessage sm = new SendMessage(br, this);

       sm.start();

   }

   public void tfMessage_actionPerformed(ActionEvent e) {

       String msg = tfMessage.getText().trim();

       if (!msg.equals("")) {

          try {

             if (msg.equalsIgnoreCase("exit"))

                System.exit(0);           

             bw.write(msg);

             bw.newLine();

             bw.flush();

             tfMessage.setText("");

          } catch (IOException ex) {}

       }

   }

   public void message(String msg) {

       taContent.append("\n"+msg);

       tfMessage.requestFocus();

   }

   public static void main(String[] args) {

       int port = 5000;

       String ip = args[0];

       String id = args[1];

       Frame f = new Frame("Chat Client");

       try {

          f.add(new ChatClient(ip, port, id), BorderLayout.CENTER);

       } catch (IOException e) {

          System.exit(-1);

       }

       f.pack();

       f.setVisible(true);

   }

   class SendMessage extends Thread {

       BufferedReader br = null;

       ChatClient cc = null;

       public SendMessage(BufferedReader br, ChatClient cc) {

          this.cc = cc;

          this.br = br;

       }

       public void run() {

          String msg = "";

          while (true) {

             try {

                msg = br.readLine();

                if (msg != null) {

                    cc.message(msg);

                }

             } catch (IOException e) {

             }

          }

       } 

   } 

}

C:\javaExample\chat>javac ChatClient.java

C:\javaExample\chat>java ChatClient localhost Jabook

 

 ChatClient¸¦ ½ÇÇàÇϱâ À§ÇØ ¹®ÀÚ¿­·Î µÈ ¼­¹öÀÇ IP ÁÖ¼Ò¿Í id¸¦ µµ½ºÃ¢À¸·ÎºÎÅÍ ¹è¿­·Î ÀÔ·ÂÀ» ¹Þ½À´Ï´Ù. »ç¿ëÀÚ¿¡°Ô º¸¿©Áú ÀÎÅÍÆäÀ̽º·Î ÇÁ·¹ÀÓÀ» Çϳª ¶ç¿ì°í, °Å±â¿¡ ChatClientÀÇ ¸ðµç ÄÄÆ÷³ÍÆ®µéÀ» Ãß°¡ÇÕ´Ï´Ù. ¿¹¿Ü»óȲÀÌ ¹ß»ýÇÏ¸é ¹Ù·Î ÇÁ·Î±×·¥ÀÌ Á¾·áÇϵµ·Ï Exception 󸮸¦ ÇØÁÝ´Ï´Ù.

 

n        public static void main(String[] args) {

n           int port = 5000;

n           String ip = args[0];

n           String id = args[1];

n           Frame f = new Frame("Chat Client");

n           try {

n              f.add(new ChatClient(ip, port, id), BorderLayout.CENTER);

n           } catch (IOException e) {

n           System.exit(-1);

n           }

n        }

 

À§¿¡¼­ ChatClientÀÇ ¸Þ¸ð¸®°¡ »ý¼ºÀÌ µÇ¸é ChatClientÀÇ »ý¼ºÀÚ¸Þ¼­µå°¡ È£ÃâµÇ¸é¼­ ¼­¹öÀÇ IP, Á¢¼ÓÇÒ Æ÷Æ®¹øÈ£ ±×¸®°í, »ç¿ëÀÚÀÇ id°¡ ¸Å°³º¯¼ö·Î ³Ñ¾î°©´Ï´Ù. »ç¿ëÀÚ°¡ ¸Þ½ÃÁö¸¦ ÀÔ·ÂÇÏ°í ¿£Å͸¦ Ä¡¸é À̺¥Æ®°¡ ¹ß»ýÇϵµ·Ï 󸮸¦ ÇØÁÝ´Ï´Ù.

 

n        public ChatClient(String ip, int port, String id) throws IOException {

n           tfMessage.addActionListener(new ActionListener() {

n              public void actionPerformed(ActionEvent e) {

n                 tfMessage_actionPerformed(e);

n              }

n           });

 

 ¼­¹ö¿ÍÀÇ ¿¬°áÀ» °ü¸®ÇÒ SocketÀ» Ŭ¶óÀ̾ðÆ®ÂÊ¿¡µµ »ý¼ºÇÑ ÈÄ, ¸Þ½ÃÁö¸¦ ¹öÆÛ¿¡ ÀÔÃâ·ÂÇÒ BufferedReader¿Í BufferedWriterÀÇ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. write()¸Þ¼­µå·Î ¹öÆÛ¿¡ ÀÔ·ÂÀ» Çϴµ¥ newLine()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ¹®À帶´Ù ¡°\n¡±À» Ãß°¡Çؼ­ ÀúÀåÇÏ°Ô µË´Ï´Ù. ¸¸¾à¿¡ ÀϾ ¿¹¿Ü »óȲ¿¡ ´ëÇØ throwŰ¿öµå¸¦ »ç¿ëÇØ¼­ Exception󸮸¦ ¹Ì·ç°í ÀÖ½À´Ï´Ù.

 

n           try {

n              socket = new Socket(ip, port);

n                br = new BufferedReader(new InputStreamReader(client.getInputStream()));

n                bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

n              bw.write(id);

n              bw.newLine();

n              bw.flush();

n           } catch (IOException e) {

n              throw e;

n           }

 

 Å¬¶óÀÌ¾ðÆ®°¡ ¸Þ½ÃÁö¸¦ ¼­¹ö¿¡ ÀÔÃâ·ÂÇÒ ¶§ »ç¿ëÇÒ, ½º·¹µå¸¦ »ó¼ÓÇÏ´Â SendMessageŬ·¡½ºÀÇ °´Ã¼¸¦ »ý¼ºÇϸ鼭, ½º·¹µå¸¦ ½ÃÀÛÇÏ°Ô ÇÕ´Ï´Ù.

 

n           SendMessage sm = new SendMessage(br, this);

n           sm.start();

n        }

 

¡®tfMessage¡¯¿¡ ¸Þ½ÃÁö¸¦ ÀÔ·ÂÇÏ°í ¿£Å͸¦ Ä¡¸é, ±× ³»¿ëÀ» ¹öÆÛ¿¡ ÀÔ·ÂÇϵµ·Ï À̺¥Æ® 󸮸¦ Çϰí ÀÖ½À´Ï´Ù. À̶§ ³»¿ëÀ» Àоî¿À´Ù°¡ ¡®exit¡¯°¡ ÀÔ·ÂÀÌ µÇ¸é ÇÁ·Î±×·¥À» Á¾·áÇϵµ·Ï Çß½À´Ï´Ù. À̶§ »ç¿ëµÇ´Â »ý¼ÒÇÑ ¸Þ¼­µå°¡ ´«¿¡ ¶çÁÒ. ¹Ù·Î equalsIgnoreCase()¸Þ¼­µå·Î À̰ÍÀº StringŬ·¡½ºÀÇ ¸â¹ö ¸Þ¼­µå·Î equals()¸Þ¼­µå¿Í ºñ½ÁÇϳª Á»´õ Æ÷°ýÀûÀ¸·Î ºñ±³ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é °ø¹é°ú ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê°í µÎ ¹®ÀÚ¿­À» ºñ±³ÇÏ´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­  ¡°Exit¡±¶ó°í Ãĵµ ÇÁ·Î±×·¥Àº Á¾·áµË´Ï´Ù. »óȲ¿¡ ÀûÀýÇÏ°Ô ¿©·¯ºÐÀÌ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.

 

n        public void tfMessage_actionPerformed(ActionEvent e) {

n           String msg = tfMessage.getText().trim();

n           if (!msg.equals("")) {

n              try {

n                 if (msg.equalsIgnoreCase("exit"))

n                 System.exit(0);           

n                 bw.write(msg);

n                 bw.newLine();

n                 bw.flush();

n              } catch (IOException ex) {}

n           }

n        }

 

À§ÀÇ ChatClientÀÇ °´Ã¼°¡ »ý¼ºÀÌ µÇ¸é »ý¼ºÀÚ¸Þ¼­µå´Â ÀÚµ¿À¸·Î È£ÃâµÇ¾î BufferedReader br°ú ChatClient c¸¦ ¸Å°³º¯¼ö·Î ¹Þ°í ÀÖ½À´Ï´Ù. ÀÌ ¶æÀº »ç¿ëÀÚÀÇ ¸Þ½ÃÁö°¡ BufferedReader·Î ¹öÆÛ¿¡ ÀÔ·ÂÀÌ µÇ¸é ½º·¹µå´Â ±× ¹öÆÛ·ÎºÎÅÍ ³»¿ëÀ» ÀÐ¾î µå¸®´Â °ÍÀÔ´Ï´Ù.

 

n        public SendMessage(BufferedReader br, ChatClient c) {

n           this.cc = c;

n           this.br = br;

n        }

 

 ½º·¹µå°¡ ½ÃÀ۵Ǹé ÀÚµ¿ È£ÃâµÇ¸é¼­, while¹®À» »ç¿ë, ¹öÆÛ¿¡ ÀÔ·ÂµÈ ¹®ÀÚ¿­À» readLine() ¸Þ¼Òµå·Î ÇÑ ¹®ÀÚ¿­¾¿ Àоî¿É´Ï´Ù.

 

n        public void run() {

n           String msg = "";

n           while (true) {

n              try {

n                 msg = br.readLine();

n                 if (msg != null) {

n                    cc.message(msg);

n                 }

n              } catch (IOException e) {

n              }

n           }

n        }

 

 ¸¶Áö¸·À¸·Î »ç¿ëÀÚ¿¡°Ô ¸Þ½ÃÁö°¡ º¸¿©Áöµµ·Ï append()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ TextArea¿¡ Ãâ·ÂÀ» ÇÕ´Ï´Ù. RequestFocus()¸Þ¼­µå·Î Ä¿¼­ÀÇ À§Ä¡¸¦ TextField¿¡ °íÁ¤½Ã۰í ÀÖ½À´Ï´Ù.

 

n        public void message(String msg) {

n           taContent.append("\n"+msg);

n           tfMessage.requestFocus();

n        }

 

À̷μ­ ÀÚ¹ÙÀÇ Á¾ÇÕ ¿¹¼úÀ̶ó ºÒ¸®´Â äÆÃ¿¡ °üÇÏ¿© ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ºñ·Ï ¿ì¸®°¡ À¥¿¡¼­º¸´Â È­·ÁÇÑ Ã¤ÆÃÀº ¾Æ´ÏÁö¸¸, äÆÃÀÇ ±âº» °³³äÀ» ÀÌÇØÇϱ⠽±°Ô ±¸ÇöÇÑ °£´ÜÇÏÁö¸¸ ÁÁÀº ¿¹Á¦¸¦ ´Ù·ç¾î º» °ÍÀÔ´Ï´Ù. ªÀº ÇÁ·Î±×·¥¼Ó¿¡ ¼ÒÄÏÅë½Å, I/O½ºÆ®¸²ÀÇ º¯È¯, ´ÙÁß ½º·¹µùÀÇ ±¸Çö ±×¸®°í AWT¸¦ ÀÌ¿ëÇÑ ÀÎÅÍÆäÀ̽º Á¦ÀÛ µî, ¸ðµÎ ÀÚ¹Ù¿¡¼­ ´Ù·ç´Â ÇÙ½É ±â¼úµéÀÌ´Ï ¿Ö Á¾ÇÕ ¿¹¼úÀ̶ó ºÒ¸®´ÂÁö ÀÌÇØ°¡ °¡½Ã¸®¶ó º¾´Ï´Ù. ¾Ë¸é ¾Ë¼ö·Ï ´õ ¿å½ÉÀÌ »ý±ä´Ù°í ÇÏÁö¿ä? ÀÌÁ¦ ¿©·¯ºÐ ½º½º·Î È­·ÁÇÑ ÀÎÅÍÆäÀ̽º¿Í ´Ù¾çÇÑ ±â´ÉµéÀ» °®Ãá ¸ÚÁø äÆÃÀ» ±¸ÇöÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù



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