|
¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[reply] | ½Å±ÔÀÔ·Â |
º°µµÀÇ ¼³¸íÀº Ãß°¡ÇÏÁö ¾Ê½À´Ï´Ù. ¼Ò½º¾ÈÀÇ ÁÖ¼®Ã³¸®¸¸À¸·Îµµ ÇÁ·Î±×·¥À» ºÐ¼®Çϴµ¥ º° ¾î·Á¿òÀÌ ¾øÀ»°Í °°¾Æ.... // ¼¹ö // ============================================================ // Message Server 4 (Multi Client) // date : 2003 // make : pwg // note : ´ÙÁß Å¬¶óÀ̾ðÆ®°¡ ºê¶ó¿ìÁ®¸¦ ÅëÇØ Á¢¼ÓÇÏ°í // À̸¦ º¤ÅÍ¿¡ Ãß°¡ÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ Àü´ÞÇÑ ¸Þ½ÃÁö¸¦ // ³ª¸ÓÁö Ŭ¶óÀ̾ðÆ®µé¿¡°Ô Àü¼ÛÇϵµ·Ï ÀÛ¼ºÇÔ. // msgServer3 °ú ¼Ò½º³»¿ë µ¿ÀÏÇÔ. // ============================================================ import java.io.*; import java.net.*; import java.util.*; public class msgServer4 { ServerSocket server; // ¼¹ö¿ë ¼ÒÄÏ Vector VecClient; // Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ® ¼ÒÄÏ º¤ÅÍ¿¡ ÀúÀå Socket socket; // ó¸®µÉ ¼ÒÄÏ Client client; // ½Ç½Ã°£À¸·Î °¢ Ŭ¶óÀ̾ðÆ®¿¡¼ ¸Þ½ÃÁö°¡ ¼ö½ÅµÇ¾ú´Â¸¦ üũ, ó¸® Vector VecMessage; // ¼ö½ÅµÈ ¸Þ½ÃÁöµéÀ» º¤ÅÍ¿¡ ÀúÀå public msgServer4() { VecClient = new Vector(); // Á¢¼Ó Ŭ¶óÀ̾ðÆ® ÀúÀå VecMessage = new Vector(); // ¼ö½ÅµÈ ¸Þ½ÃÁö ÀúÀå msgInit(); // º¤ÅÍ¿¡ ÀúÀåµÈ ¸Þ½ÃÁö ÃʱâÈ try { server = new ServerSocket(7777); System.out.println("Server Starting(msgServer4)..."); acceptProcess(); } catch (Exception e) { System.out.println("Starting error " + e); } } // Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓµÇ¸é Ŭ¶óÀ̾ðÆ®º°·Î Ŭ·¡½º¸¦ ¸¸µé°í ¸Þ½ÃÁö¸¦ ½Ç½Ã°£À¸·Î ¼ö½ÅÇϵµ·Ï Á¶Ä¡ public void acceptProcess() { while(true) { try { System.out.println("clinet accepting..."); socket = server.accept(); // Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓµÇ¾ú´Â°¡ if(socket == null) break; client= new Client(socket); // Á¢¼ÓµÈ ¼ÒÄÏÀ» °¡Áö°í Ŭ¶óÀ̳ÊÆ® ¾²·¹µå »ý¼º VecClient.addElement(client); // Á¢¼ÓµÈ ¼ÒÄÏÁ¤º¸¸¦ º¤ÅÍ¿¡ ÀúÀå sendMsgAll(client); // ÇöÀç Á¢¼ÓÀÚ¿¡°Ô ÀúÀåµÈ ¸Þ½ÃÁö Àü¼Û client.start(); // °¢ Ŭ¶óÀ̾ðÆ®º° ¾²·¹µå ½ÃÀÛ System.out.println("add Client..."); } catch (Exception e) { System.out.println("Client accept error..."); } } } // óÀ½ Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓµÇ¸é ÇöÀç ¼¹ö°¡ °¡Áö°í ÀÖ´Â ¸Þ½ÃÁö ÀüºÎ¸¦ ÇØ´ç Ŭ¶óÀ̾ðÆ®¿¡°Ô // ¸ðµÎ Àü¼ÛÇÑ´Ù. public void sendMsgAll(Client c) { for(Enumeration enum = VecMessage.elements() ; enum.hasMoreElements();) { c.send.println((String)enum.nextElement()); } } // Á¢¼ÓµÈ ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô »õ·Ó°Ô Ãß°¡µÈ ¸Þ½ÃÁö¸¦ Àü¼ÛÇÑ´Ù. 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; // ¼¹ö°¡ acceptÇÑ ¼ÒÄÏÀ» °¡Áö°í Client °´Ã¼¸¦ ¸¸µé°í, // 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..."); } } // Clientº°·Î ¾²·¹µµ ÀÛµ¿(¸Þ½ÃÁö ¼ö½Å¿©ºÎ üũ) public void run() { while(true) { try { Thread.sleep(500); msg = receive.readLine(); if(msg==null) { msg="null"; continue; } // ¼ö½ÅµÈ ¸Þ½ÃÁö°¡ ÀÌ¿Í °°À¸¸é ¼¹ö°¡ °¡Áö°í ÀÖ´Â ¸Þ½ÃÁö º¤ÅÍ // ¸¦ ÃʱâÈ ÇÑ´Ù. if(msg.equals("message_init")) { msgInit(); allClientMsgInit(); continue; } // ¼ö½ÅµÈ ¸Þ½ÃÁö°¡ ÀÌ¿Í °°À¸¸é ¼¹ö¿¡ ÀúÀåµÈ Ŭ¶óÀ̾ðÆ® Á¤º¸¸¦ // º¤ÅÍ¿¡¼ Á¦°ÅÇÑ´Ù. if(msg.equals("client_close")) { clientCloseProcess(); continue; } System.out.println(msg); VecMessage.addElement(msg); sendProcess(msg); } catch (Exception e) { System.out.println("readLine error..."); } } } // ¼¹ö°¡ °¡Áö°í Àִ Ŭ¶óÀ̾ðÆ® Á¤º¸¸¦ º¤ÅÍ¿¡¼ Á¦°ÅÇÑ´Ù. // ÀÌ·¸°Ô ÇÔÀ¸·Î½á ºÒÇÊ¿äÇÑ Å¬¶óÀ̾ðÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ // Á¦°ÅÇÑ´Ù. public void clientCloseProcess() { 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 void msgInit() { VecMessage.removeAllElements(); VecMessage.trimToSize(); VecMessage.addElement("message_init"); VecMessage.addElement("¾È³çÇϼ¼¿ä. ÁÁÀº ÇÏ·ç µÇ½Ê½Ã¿ä..."); } // Á¢¼ÓµÇ¾î ÀÖ´Â ¸ðµç Ŭ¶óÀ̾ðÆ®ÀÇ ¸Þ½ÃÁö¸¦ ÃʱâÈ ÇÑ´Ù. public void allClientMsgInit() { String str; for(Enumeration c=VecClient.elements() ; c.hasMoreElements();) { Client client=(Client)c.nextElement(); for(Enumeration m=VecMessage.elements() ; m.hasMoreElements();) { str = (String)m.nextElement(); client.send.println(str); } } } public static void main(String[] args) { msgServer4 f = new msgServer4(); } } // Ŭ¶óÀ̾ðÆ® // ======================================================= // client socket test 4(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 msgClient4 extends Applet implements ActionListener { Socket socket; //ÇöÀç Á¦¾îÇÒ Å¬¶óÀ̾ðÆ® ¼ÒÄÏ TextField txtSendMsg; // ÀÔ·ÂÇÒ ¹®ÀÚ¿ Button btnSend; // ¸Þ½ÃÁö Àü¼Û ¹öÆ° Label msg; // ¼¹ö·Î ºÎÅÍ Àü´Þ ¹ÞÀº ¸Þ½ÃÁöµé Ç¥½Ã String serverAddress = "studyto.cafe24.com"; // ¿¬°áÇÒ ¼¹öÁÖ¼Ò int portNumber = 7777; // ¿¬°áÇÒ Æ÷Æ®¹øÈ£ Vector VecMessage; // ¼¹ö¿¡¼ ¹ÞÀº ¸Þ½ÃÁö ÀúÀå º¤ÅÍ Receive r; // ¸Þ½ÃÁö ¼ö½Å Ŭ·¡½º(¾²·¡µå·Î ÀÛµ¿) viewMessage v; // º¤ÅÍ¿¡ ÀúÀåµÈ ¸Þ½ÃÁö¸¦ ÇÑ°³¾¿ Ç¥½Ã // ¸Þ½ÃÁö ¼ö½Å¿¡ ÇÊ¿äÇÑ °´Ã¼µé InputStream input; InputStreamReader reader; BufferedReader receive; // ¸Þ½ÃÁö ¼Û½Å¿¡ ÇÊ¿äÇÑ °´Ã¼µé OutputStream output; OutputStreamWriter writer; PrintWriter send; // ºê¶ó¿ìÁ®°¡ ÃÖÃÊ·Î ¶ç¿öÁ³À»¶§ ÃʱâÈ public void init() { setLayout(null); setBackground(new Color(255,255,255)); VecMessage = new Vector(); msg = new Label(); msg.setBounds(0,0,595,30); msg.setBackground(new Color(255,255,0)); msg.setForeground(new Color(0,0,255)); add(msg); txtSendMsg = new TextField(); txtSendMsg.setBounds(0,32,500,20); add(txtSendMsg); btnSend = new Button("send"); btnSend.setBounds(503,32,92,20); add(btnSend); btnSend.addActionListener(this); } // ºê¶ó¿ìÀú¸¦ ¸®·ÎµåÇÒ¶§ public void start() { if(socket !=null) { disConnectProcess(); // ¸®·ÎµåÇÑ ºê¶ó¿ìÀúÀÇ ¼ÒÄÏÀ» Á¦°Å } v = new viewMessage(); // ¸Þ½ÃÁö¸¦ Ç¥½ÃÇÏ´Â ¾²·¹µå ÀÛµ¿ v.start(); connectProcess(); // ¼ÒÄÏ »õ·Ó°Ô »ý¼º¹× ¿¬°á r = new Receive(); // ¸Þ½ÃÁö ¼ö½Å¿¡ °ü°èÇÑ ¾²·¹µå ÀÛµ¿ r.start(); } // ºê¶ó¿ìÀú°¡ ´Ù¸¥ URL·Î À̵¿ÇÒ¶§ ¼ÒÄÏ¿¡ °ü°èµÈ ³»¿ë Á¦°Å public void stop() { if(socket !=null) { disConnectProcess(); } } // ºê¶ó¿ìÀú¸¦ Á¾·á½ÃÄ×À»¶§ ¼ÒÄÏ¿¡ °ü°èµÈ ³»¿ë Á¦°Å public void destroy() { if(socket !=null) { disConnectProcess(); } } // ¼ÒÄÏ ¿¬°á public void connectProcess() { try { socket = new Socket(serverAddress,portNumber); //socket.setSoTimeout(1); if(socket !=null) // ¼ÒÄÏÀÌ Á¤»óÀûÀ¸·Î ¿¬°áµÇ¾ú´Ù¸é { VecMessage.removeAllElements(); // °¡Áö°í ÀÖ´Â ¸Þ½ÃÁö ¸ðµÎ Á¦°ÅÇÑÈÄ // ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÏ°í ¼Û½ÅÇÒ ¼ö ÀÖµµ·Ï °´Ã¼ ¿¬°áÀÛ¾÷ 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.setText("connect error" + e); } } // °¢ Ŭ¶óÀ̾ðÆ®°¡ ÀÔ·ÂÇÑ ¸Þ½ÃÁö ¼¹ö·Î Àü¼Û public void sendMsg() { String txt = txtSendMsg.getText(); if(txt != null) { send.println(txt); txtSendMsg.setText(""); } } public void actionPerformed(ActionEvent e) { if(e.getActionCommand() == "send") // "send" ¹öÆ°ÀÌ ´·ÁÁö¸é { sendMsg(); // ¸Þ½ÃÁö Àü¼Û } } // ¼ÒÄÏ ¿¬°áÀÌ ²÷¾îÁö¸é ¼¹ö¿¡ ÀÚ½ÅÀÌ Á¾·áµÇ¾úÀ½À» ¾Ë¸®°í, // ÀÛµ¿µÇ¾ú´ø ¾²·¹µå¸¦ ÁßÁö ÇÑ´Ù. public void disConnectProcess() { send.println("client_close"); r.stop(); v.stop(); } // ¼¹ö·Î ºÎÅÍ Àü¼Û¹ÞÀº ¸Þ½ÃÁö¸¦ º¤ÅÍ¿¡¼ Çϳª¾¿ ²¨³» ŸÀÚÄ¡´Â È¿°ú¸¦ ÁÖ¾î // ÇÑÁÙ¾¿ Ç¥½ÃÇÑ´Ù. class viewMessage extends Thread { int locate,len=0,i; String strVector=new String(); int msgTotCnt; public viewMessage() { locate=0; // Ç¥½ÃÇÒ ¸Þ½ÃÁöÀÇ À§Ä¡ msgTotCnt = VecMessage.size(); // º¤ÅÍ¿¡ ÀúÀåµÈ ¸Þ½ÃÁöÀÇ ÃÑ °³¼ö. } public void run() { msgTotCnt = VecMessage.size(); while(true) { try { Thread.sleep(2000); // 2Ãʸ¶´Ù ¸Þ½ÃÁö¸¦ ¹Ù²Ù¾î Ç¥½ÃÇÑ´Ù. msgTotCnt = VecMessage.size(); if(locate >= msgTotCnt) locate=0; if(msgTotCnt <1) continue; strVector= "[" + (locate+1) + " / " + msgTotCnt + "] " + (String)VecMessage.elementAt(locate); len = strVector.length(); for(i = 0 ; i<=len ; i++) { msg.setText(strVector.substring(0,i)); try { Thread.sleep(77); } catch (Exception e){} } locate++; }catch (Exception e){msg.setText("run error" + e);} } } }; // ¼¹ö·Î ºÎÅÍ ¸Þ½ÃÁö¸¦ ¼ö½Å¹Þ´Â´Ù. class Receive extends Thread { int enum,i,msgCnt; int msgTotCnt = VecMessage.size(); int len; String str; String strVector; int locate=0; public void run() { i=1; while(true) { try { Thread.sleep(500); str = receive.readLine(); // ¸Þ½ÃÁö ¼ö½Å msg.setText("Receive message " + i); if(str.equals("message_init")) // ¸Þ½ÃÁöÀÇ ³»¿ëÀÌ ÀÌ¿Í °°Àº¸é ¸Þ½ÃÁö ÃʱâÈ { VecMessage.removeAllElements(); continue; } if( str!= null) { VecMessage.addElement(str) ; } i++; }catch (Exception e){msg.setText("readling error" + e );} } // while end } // run() end }; // inner class end } |
¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[reply] | ½Å±ÔÀÔ·Â |