Synchronized로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Synchronized로 검색한 결과
등록일:2008-04-15 16:39:44
작성자:
제목:자바 채팅 소스


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

public  class  MultiServer{            
              ServerSocket  sc;
              Vector  users;
              UserThread  user;
              Enumeration  usersEn;

              public  static  void  main(String  args[]){
                  MultiServer  ms=null;
                  try{
      ms=new  MultiServer();
            ms.welcomeUsers();
                  }catch(Exception  e){
                  System.out.println("main:"+e);
                  }
              }

              public  MultiServer()  throws  Exception{
                              sc=new  ServerSocket(5555);
                                users=new  Vector();
              }

              public  void  welcomeUsers()  throws  Exception{
                            while(true){
                                        Socket  socket=sc.accept();
                                        user=new  UserThread(socket,  this);
                                        addUser(user);
                                        user.setDaemon(true);
                                        user.start();                            
                            }
              }
              public  Synchronized  void  addUser(Thread  userThread){
                            users.add(userThread);
                            System.out.println("current  Users  :  "+users.size());
              }

              public  Synchronized  void  broadCast(String  message){
                            usersEn=users.elements();
                            while(usersEn.hasMoreElements()){
                                    ((UserThread)usersEn.nextElement()).sendMessage(message);
                            }
              }
  public  void  broadUserList(){
    String  re="";
    for(int  i=0;  i<users.size();  i++)
      re+=((UserThread)users.get(i)).nickName+"|";
    re=re.substring(0,re.length()-1);
    broadCast("001"+re);
  }

              public  Synchronized  void  deleteFromServer(UserThread  userThread){
                            users.remove(userThread);
                            System.out.println(users.size()+"  left  in  server");
              }
}
class  UserThread  extends  Thread{
            Socket  socket;
            MultiServer  server;
            BufferedReader  reader;
            BufferedWriter  writer;
            String  userMsg;
            String  nickName;

            public  UserThread(Socket  user_socket,  MultiServer  main_server)  throws  Exception{
    socket=user_socket;
                server=main_server;
                        
                reader=new  BufferedReader(new  InputStreamReader(socket.getInputStream()));
                                writer=new  BufferedWriter(new  OutputStreamWriter(socket.getOutputStream()));
            }
            public  void  run(){
  try{
                          while((userMsg=reader.readLine())  !=  null){
                            if(userMsg.startsWith("001")){    //  사용자리스트
      nickName=userMsg.substring(3);
                                  server.broadCast("002새로운  사용자["+nickName+"]님  입장");
      server.broadUserList();
                                }else  if(userMsg.startsWith("002")){    //  일반대화
      server.broadCast("002"+userMsg.substring(3));
    }else{
    }
                          }
  }catch(SocketException  se){  
    //클라이언트와의  연결  오류
  }catch(Exception  e){
    System.out.println("run:"+e);
                }
                closeUser();
            }
            public  void  sendMessage(String  server_message){
                          try{
    System.out.println("sendMsg:"+server_message);
                                  writer.write(server_message+"\n");
                                  writer.flush();
                          }catch(Exception  e){
    System.out.println("sendMessage:"+e);
                          }
            }
            public  void  closeUser(){
                          try{
                                  server.deleteFromServer(this);
                                  writer.close();
                                  reader.close();
                                  socket.close();
                          }catch(Exception  e){
    System.out.println("closeUser:"+e);
                          }
            }
}
-----------------------------------------------

import  java.io.*;
import  java.net.*;
import  java.awt.*;
import  java.awt.event.*;
import  java.util.StringTokenizer;
class  PromptClient  extends  Frame  implements  ActionListener{
              Thread  listenThread;
              Socket  socket;
              BufferedReader  reader;
              BufferedWriter  writer;

              String  server_msg;
              String  user_msg;
              String  name;

  TextArea  ta;
  TextField  tf;
  List  list;
  Button  b;
  Panel  p1,p2;
  
              public  PromptClient(String  userName)  throws  Exception{
    super("["+userName+"]님의채팅창");
    this.name=userName;
    p1=new  Panel();  p2=new  Panel();
    ta=new  TextArea();
    tf=new  TextField(40);
    tf.addActionListener(this);
    list=new  List();
    b=new  Button("나가기");
    p1.setLayout(new  GridLayout(1,2));
    p1.add(ta);  p1.add(list);
    p2.add(tf);  p2.add(b);
    add(p1,"Center");  add(p2,"South");
                              name=userName;                    
                              socket=new  Socket("localhost",5555);
  
                              reader=new  BufferedReader(new  InputStreamReader(socket.getInputStream()));
                            writer=new  BufferedWriter(new  OutputStreamWriter(socket.getOutputStream()));
    sendMessage("001"+userName+"\n");
              }
              public  void  listenMessage(){
                            listenThread=new  Thread(){
                                        public  void  run(){
      try{
                                                  while(  (server_msg=reader.readLine())  !=  null  ){
          System.out.println(server_msg);
          if(server_msg.startsWith("001")){
            list.removeAll();
            StringTokenizer  st  =  new  StringTokenizer(server_msg.substring(3),"|");
                      while  (st.hasMoreTokens())
                              list.add((String)st.nextToken());
          }else  if(server_msg.startsWith("002")){
            ta.append(server_msg.substring(3)+"\n");
          }
                                                                
                                                  }
        closeAll();
      }catch(Exception  e){
        System.out.println(e);
                                                  closeAll();
                                                }
                                        }
                            };
                            listenThread.setDaemon(true);
                            listenThread.start();
              }
              public  void  closeAll(){
                              try{
                                      
                                      reader.close();
                                      writer.close();
                                      socket.close();
                                      System.exit(0);
                              }catch(IOException  ie){
                                      System.out.println(ie.getMessage());
                              }
              }
              public  void  sendMessage(String  msg){
                              try{
                                        writer.write(msg+"  \n");                                      
                                        writer.flush();
                              }catch(IOException  ie){
                                      System.out.println(ie.getMessage());
                              }
    
              }
  public  void  actionPerformed(ActionEvent  ae){
    sendMessage("002["+name+"]"+tf.getText());
    tf.setText("");
  }
              public  static  void  main(String  args[]){
    PromptClient  cl=null;
    try{
                                cl=new  PromptClient(args[0]);
      cl.setBounds(200,200,400,400);
      cl.setVisible(true);
                                cl.listenMessage();
                                  
                                          
    }catch(Exception  e){
      cl.closeAll();
    }
              }
}