ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java]chatting server & client.
    컴퓨터/JAVA 2006. 3. 24. 23:55
    원문: http://www.javaworld.com/javaworld/jw-01-1997/jw-01-chat_p.html

    한글문서: http://www.javastudy.co.kr/docs/jm/jm8.html

    ChatServer.java
    import java.net.*; 
    import java.io.*; 
    import java.util.*; 
     
    public class ChatServer { 
    public ChatServer (int port) throws IOException { 
       ServerSocket server = new ServerSocket (port); 
       while (true) { 
         Socket client = server.accept (); 
         System.out.println ("Accepted from " + client.getInetAddress ()); 
         ChatHandler c = new ChatHandler (client); 
         c.start (); 
       } 

     
    public static void main (String args[]) throws IOException { 
         int port=0;
       if (args.length != 1) 
           port = 9830;
       else
           port = Integer.parseInt(args[0]);
       new ChatServer (port); 

    }  


    ChatHandler.java
    import java.net.*;
    import java.io.*;
    import java.util.*;

    public class ChatHandler extends Thread {
       protected Socket s;
       protected DataInputStream i;
       protected DataOutputStream o;

       public ChatHandler (Socket s) throws IOException {
           this.s = s;
           i = new DataInputStream (new BufferedInputStream (s.getInputStream()));
           o = new DataOutputStream (new BufferedOutputStream (s.getOutputStream()));
       }

       protected static Vector handlers = new Vector ();

       public void run () {
           String name = s.getInetAddress ().toString ();
           try {
               broadcast (name + " has joined. ");
               handlers.addElement(this);
               while(true) {
                   String msg = i.readUTF();
                   broadcast (name + " - " + msg);
               }
           } catch (IOException ex) {
               ex.printStackTrace();
           } finally {
               handlers.removeElement(this);
               broadcast(name + " has left.");
               try  {
                   s.close();
               } catch (IOException ex ) {
                   ex.printStackTrace();
               }
           }
       }


       protected static void broadcast (String message) {
           synchronized (handlers) {
               Enumeration e = handlers.elements ();
               while (e.hasMoreElements ()) {
                   ChatHandler c = (ChatHandler) e.nextElement ();
                   try {
                       synchronized (c.o) {
                           c.o.writeUTF(message);
                       }
                       c.o.flush();
                   } catch (IOException ex) {
                       c.stop();
                   }
               }
           }
       }
    }


    ChatApplet.java
    import java.net.*; 
    import java.io.*; 
    import java.awt.*; 
    import java.applet.*; 
     
    // Applet parameters: 
    //   host = host name 
    //   port = host port 
     
    public class ChatApplet extends Applet implements Runnable { 
    protected DataInputStream i; 
    protected DataOutputStream o; 
     
    protected TextArea output; 
    protected TextField input; 
     
    protected Thread listener; 
     
    public void init () { 
       setLayout (new BorderLayout ()); 
       add ("Center", output = new TextArea ()); 
       output.setEditable (false); 
       add ("South", input = new TextField ()); 
       input.setEditable (false); 

     
    public void start () { 
       listener = new Thread (this); 
       listener.start (); 

     
    public void stop () { 
       if (listener != null) 
         listener.stop (); 
       listener = null; 

     
    public void run () { 
       try { 
         String host = getParameter ("host"); 
         if (host == null) 
       host = getCodeBase ().getHost (); 
         String port = getParameter ("port"); 
         if (port == null) 
       port = "9830"; 
         output.appendText ("Connecting to " + host + ":" + port + "..."); 
         Socket s = new Socket (host, Integer.parseInt (port)); 
         i = new DataInputStream (new BufferedInputStream (s.getInputStream ())); 
         o = new DataOutputStream (new BufferedOutputStream (s.getOutputStream ())); 
         output.appendText (" connected.\n"); 
         input.setEditable (true); 
         input.requestFocus (); 
         execute (); 
       } catch (IOException ex) { 
         ByteArrayOutputStream out = new ByteArrayOutputStream (); 
         ex.printStackTrace (new PrintStream (out)); 
         output.appendText ("\n" + out); 
       } 

     
    public void execute () { 
       try { 
         while (true) { 
           String line = i.readUTF (); 
           output.appendText (line + "\n"); 
         } 
       } catch (IOException ex) { 
         ByteArrayOutputStream out = new ByteArrayOutputStream (); 
         ex.printStackTrace (new PrintStream (out)); 
         output.appendText (out.toString ()); 
       } finally { 
         listener = null; 
         input.hide (); 
         validate (); 
         try { 
           o.close (); 
         } catch (IOException ex) { 
           ex.printStackTrace (); 
         } 
       } 

     
    public boolean handleEvent (Event e) { 
       if ((e.target == input) && (e.id == Event.ACTION_EVENT)) { 
         try { 
           o.writeUTF ((String) e.arg); 
           o.flush (); 
         } catch (IOException ex) { 
           ex.printStackTrace(); 
           listener.stop (); 
         } 
         input.setText (""); 
         return true; 
       } else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) { 
         if (listener != null) 
           listener.stop (); 
         hide (); 
         return true; 
       } 
       return super.handleEvent (e); 




    ChatApplet.html
    <HTML>
    <HEAD><TITLE></TITLE></HEAD>

    <BODY>
    <APPLET code=ChatApplet.class width=500 height=500></APPLET>
    </BODY>

    </HTML>

Designed by Tistory.