´ÙÀ½À¸·Î´Â 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ºÎ ÀúÀÚ:ÃÖ¿µ°ü |