|
¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[reply] | ½Å±ÔÀÔ·Â |
¼Ò½º¿¡ ´ëÇÑ º°´Ù¸¥ ¼³¸íÀº Ãß°¡ÇÏÁö ¾Ê½À´Ï´Ù. ¼Ò½º³»¿¡°Ô ÀÖ´Â ÁÖ¼®¸¸À¸·Îµµ ÀÌÇØ ÇÒ¼ö ÀÖÀ¸¸®¶õ ±â´ë·Î... // ¼¹ö // ============================================================ // Message Server 3 (Multi Client) // date : 2003 // make : pwg // note : ´ÙÁß Å¬¶óÀ̾ðÆ®°¡ ºê¶ó¿ìÁ®¸¦ ÅëÇØ Á¢¼ÓÇÏ°í // À̸¦ º¤ÅÍ¿¡ Ãß°¡ÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ Àü´ÞÇÑ ¸Þ½ÃÁö¸¦ // ³ª¸ÓÁö Ŭ¶óÀ̾ðÆ®µé¿¡°Ô Àü¼ÛÇϵµ·Ï ÀÛ¼ºÇÔ. // ============================================================ import java.io.*; import java.net.*; import java.util.*; public class msgServer3 { ServerSocket server; Vector VecClient; // Á¢¼ÓµÈ Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ ÀúÀå Socket socket; // ÇöÀç Á¦¾îµÉ Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ Client client; // ¸Þ½ÃÁö¸¦ ½Ç½Ã°£À¸·Î ¹Þ±â À§ÇÑ Å¬¶óÀ̾ðÆ® public msgServer3() { VecClient = new Vector(); // Á¢¼Ó Ŭ¶óÀ̾ðÆ® ÀúÀåÇϱâ À§ÇØ º¤ÅÍ »ý¼º try { server = new ServerSocket(7776); System.out.println("Server Starting..."); acceptProcess(); } catch (Exception e) { System.out.println("Starting error " + e); } } public void acceptProcess() { while(true) { try { System.out.println("clinet accepting..."); // Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍ Á¢¼ÓÀÌ µÇ¸é ÇØ´ç ¼ÒÄÏÀ» º¤ÅÍ¿¡ ÀúÀåÇÏ°í // clinet Ŭ·¡½ºÀÇ ¾²·¹µå¸¦ ½ÃÀÛÇÑ´Ù. socket = server.accept(); if(socket != null) { client= new Client(socket); VecClient.addElement(client); client.start(); System.out.println("add Client..."); } } catch (Exception e) { System.out.println("Client accept error..."); } } } // Àü´ÞµÈ ¸Þ½ÃÁö¸¦ °¢ Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü´ÞÇÑ´Ù. public void sendProcess(String m) { int cnt=0; for(Enumeration enum = VecClient.elements() ; enum.hasMoreElements();) { cnt++; Client c = (Client)enum.nextElement(); // º¤ÅÍ¿¡ ÀúÀåµÈ ¼ÒÄÏÀ» Çϳª °¡Á®¿Â´Ù. c.send.println(m); // ÇØ´ç ¼ÒÄÏ¿¡ ¸Þ½ÃÁö¸¦ Àü¼ÛÇÑ´Ù. //c.send.flush(); System.out.println("No=[" + cnt +"]"+ m); } } // Ŭ¶óÀ̾ðÆ®°¡ ¼¹ö¿¡ Á¢¼ÓµÇ¸é ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö¸¦ ¼¹ö°¡ // °¢ Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍ ¼ö½Å¹ÞÀ» ¼ö ÀÖµµ·Ï Ŭ¶óÀ̾ðÆ®º°·Î // ¾²·¹µå¸¦ »ý¼ºÇÑ´Ù. class Client extends Thread { Socket clientSocket; String msg; // ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÏ´Â ÇÊ¿äÇÑ °´Ã¼µé InputStream input; InputStreamReader reader; BufferedReader receive; // ¸Þ½ÃÁö¸¦ ¼Û½ÅÇÏ´Â ÇÊ¿äÇÑ °´Ã¼µé OutputStream output; OutputStreamWriter writer; PrintWriter send; // ClientŬ·¡½º¸¦ »ý¼ºÇÏ¸é¼ ¸Þ½ÃÁö ¼Û¼ö½Å¿¡ ÇÊ¿äÇÑ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. public Client(Socket socket) { clientSocket = socket; try { input = clientSocket.getInputStream(); reader = new InputStreamReader(input); receive = new BufferedReader(reader); output = clientSocket.getOutputStream(); writer = new OutputStreamWriter(output); send = new PrintWriter(writer,true); } catch (Exception e) { System.out.println("Stream error..."); } } // ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÑ´Ù. public void run() { while(true) { try { Thread.sleep(500); msg = receive.readLine(); // ¸Þ½Ã½Ã ¼ö½Å if(msg==null) { msg="null"; return; } // Ŭ¶óÀ̾ðÆ® ºê¶ó¿ìÁ®°¡ Á¾·áµÇ°Å³ª ´Ù½Ã ½ÃÀÛÇϸé // ¼¹ö¿¡ ÀúÀåµÈ Ŭ¶óÀ̾ðÆ® Á¤º¸ Á¦°Å if(msg.equals("socket_close")) { closeRtn(); } System.out.println(msg); sendProcess(msg); } catch (Exception e) { System.out.println("readLine error..."); } } } // ¼¹ö¿¡ Àִ Ŭ¶óÀ̾ðÆ® Á¤º¸ Á¦°Å public void closeRtn() { System.out.println("Client cnt= " + VecClient.size()); try { receive.close(); send.close(); } catch (Exception e) { System.out.println("Closing error.."); } VecClient.removeElement(this); VecClient.trimToSize(); System.out.println("Client cnt= " + VecClient.size()); this.stop(); } } // inner Client class end public static void main(String[] args) { msgServer3 f = new msgServer3(); } } // Ŭ¶óÀ̾ðÆ® // ======================================================= // client socket test 3(Applet) // msg client // date : 2003 // make : pwg // note : java ver 1.3 // applet version // ÇÑ°³ÀÇ ¼¹ö¿¡ ´ÙÁß Å¬¶óÀ̾𰡠Á¢¼ÓÇÏ¿© ¸Þ½ÃÁö ÁÖ°í ¹Þ±â // ======================================================= import java.net.*; import java.io.*; import java.awt.*; import java.applet.*; import java.awt.event.*; import java.util.*; public class msgClient3 extends Applet implements ActionListener,KeyListener { Socket socket; TextField txtAddress, txtSendMsg; Button btnConnect,btnSend; TextArea msg; int portNumber = 7776; // ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö¸¦ ¼ö½ÅÇϴ Ŭ·¡½º ÀνºÅϽº Receive r; InputStream input; InputStreamReader reader; BufferedReader receive; OutputStream output; OutputStreamWriter writer; PrintWriter send; public void init() { setLayout(null); txtAddress = new TextField("studyto.cafe24.com"); txtAddress.setBounds(0,0,100,20); add(txtAddress); btnConnect = new Button("connect"); btnConnect.setBounds(105,0,70,20); add(btnConnect); btnConnect.addActionListener(this); msg = new TextArea(); msg.setBounds(0,22,200,70); add(msg); txtSendMsg = new TextField(); txtSendMsg.setBounds(0,95,100,20); txtSendMsg.addKeyListener(this); // ¿£ÅÍÅ°¸¦ ó¸®Çϱâ À§ÇÑ ¸®½º³Ê add(txtSendMsg); btnSend = new Button("send"); btnSend.setBounds(105,95,70,20); add(btnSend); btnSend.addActionListener(this); } // ÇöÀç ºê¶ó¿ìÁ®°¡ ´Ù½Ã ·ÎµùµÇ¸é ¼ÒÄÏÀ» ´Ý¾Ò´Ù°¡ ´Ù½Ã »ý¼º public void start() { if(socket !=null) { disConnectProcess(); } connectProcess(); r = new Receive(); r.start(); } // ºê¶ó¿ìÁ®°¡ Á¾·áµÇ¸é ¼¹ö¿¡ Á¾·á ¸Þ½ÃÁö Àü´Þ public void stop() { if(socket !=null) { disConnectProcess(); } } // ºê¶ó¿ìÁ®°¡ ¿ÏÀüÈ÷ Á¾·áµÇ¸é Á¾·á ¸Þ½ÃÁö Àü´Þ public void destroy() { if(socket !=null) { disConnectProcess(); } } // ¼Û¼ö½Å¿¡ ÇÊ¿äÇÑ °´Ã¼µé°ú ¼ÒÄÏ »ý¼º public void connectProcess() { try { socket = new Socket(txtAddress.getText(),portNumber); if(socket !=null) { input = socket.getInputStream(); reader = new InputStreamReader(input); receive = new BufferedReader(reader); output = socket.getOutputStream(); writer = new OutputStreamWriter(output); send = new PrintWriter(writer,true); } } catch (Exception e) { msg.append("connect error"+e+"\n"); } } // ¼¹ö·Î ¸Þ½ÃÁö Àü´Þ public void sendMsg() { String txt = txtSendMsg.getText(); if(txt != null) { send.println(txt); txtSendMsg.setText(""); } } // ¹öÆ°¿¡ ´ëÇÑ À̺¥Æ® ó¸® public void actionPerformed(ActionEvent e) { // connect ¹öÆ°À» Ŭ¸¯ÇßÀ»¶§ if(e.getActionCommand() == "connect") { if(socket != null) // ÇöÀç ¼ÒÄÏÀÌ Á¸ÀçÇÏ¸é ¼ÒÄÏÀ» ´Ý°í { disConnectProcess(); } connectProcess(); // ¼ÒÄÏ »ý¼º r = new Receive(); // ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö ¼ö½Å ¾²·¹µå ½ÃÀÛ r.start(); } if(e.getActionCommand() == "send") { if(socket !=null) sendMsg(); } } // ¿£ÅÍÅ°°¡ ´·ÁÁö¸é ¸Þ½ÃÁö Àü¼Û public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { if(socket !=null) sendMsg(); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } // ¼ÒÄÏÀÌ Á¾·áµÇ¸é ¾²·¹µå Á¾·á ¼Û¼ö½Å °´Ã¼ Á¦°Å public void disConnectProcess() { send.println("socket_close"); try { send.close(); receive.close(); r.stop(); } catch (Exception e) { } } // ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö¸¦ ¼ö½ÅÇϴ Ŭ·¡½º // ¾²·¹µå·Î ÀÛµ¿ class Receive extends Thread { String txtMsg; public void run() { while(true) { try { Thread.sleep(500); txtMsg=receive.readLine(); if(txtMsg !=null) { msg.append(txtMsg+"\n"); } } catch (Exception e) { } } } }; } |
¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[reply] | ½Å±ÔÀÔ·Â |