[] STUDY ³»¿ë

ÀÛ¼ºÀÏ 2003-12-05
ÀÛ¼ºÀÚ park
Á¶È¸¼ö 1777
Á¦ ¸ñ ¼ÒÄÏÀ» »ç¿ëÇÑ °£´ÜÇÑ Ã¤ÆÃ

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

¼ÒÄÏÀ» »ç¿ëÇÑ °£´ÜÇÑ Ã¤Æà °ú(¿Í) °ü·ÃµÈ Ãß°¡ Á¤º¸

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

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