[] STUDY ³»¿ë

ÀÛ¼ºÀÏ 2003-12-03
ÀÛ¼ºÀÚ park
Á¶È¸¼ö 2458
Á¦ ¸ñ ¼ÒÄÏÀ» È°¿ëÇÑ ½Ç½Ã°£ ¸Þ½ÃÁö Àü´Þ ¼­ºñ½º

¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[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
}

¼ÒÄÏÀ» È°¿ëÇÑ ½Ç½Ã°£ ¸Þ½ÃÁö Àü´Þ ¼­ºñ½º °ú(¿Í) °ü·ÃµÈ Ãß°¡ Á¤º¸

  • Ŭ¶óÀ̾ðÆ®ÀÇ ÇöÀç ¸¶¿ì½º ÁÂÇ¥ ¼ÛÃâ(¼­¹ö) [2004-04-07] [park´Ô Àç°ø] [Á¶È¸:927]
  • Ŭ¶óÀ̾ðÆ®ÀÇ ÇöÀç ¸¶¿ì½º ÁÂÇ¥ ¼ÛÃâ(Ŭ¶óÀ̾ðÆ®) [2004-04-07] [park´Ô Àç°ø] [Á¶È¸:1278]
  • °¡Àå °£´ÜÇÑ ¼ÒÄÏ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® [2003-11-27] [park´Ô Àç°ø] [Á¶È¸:986]
  • ¼ÒÄÏÀ» È°¿ëÇÑ ½Ç½Ã°£ ¸Þ½ÃÁö Àü´Þ ¼­ºñ½º [2003-12-03] [park´Ô Àç°ø] [Á¶È¸:2458]
  • ¼ÒÄÏÀ» »ç¿ëÇÑ °£´ÜÇÑ Ã¤Æà [2003-12-05] [park´Ô Àç°ø] [Á¶È¸:1777]

    ¸ñ·ÏÀ¸·Î | ¼öÁ¤ | »èÁ¦ | Á¤º¸Ãß°¡[reply] | ½Å±ÔÀÔ·Â