디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

횽들..자바 채팅사용자 리스트에 뜨게하고싶은데..

봉봉(112.144) 2011.11.14 20:50:53
조회 110 추천 0 댓글 0

여기서 HumanList라고 잇다?
거기에서 사용자들을 띄우고 싶은데 잘안되네.. 도와주세여ㅛ 굽신굽신..


-----------------------------서버------------------------------------

package ex;
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

 

public class GUIChatServer extends Frame implements ActionListener {
 Button btnExit;
 Button bt_connect;
 TextArea ta;
 Vector vChatList;
 ServerSocket ss;
 Socket sockClient;
 TextField txt_port;
 int port;
 CardLayout cl; // 카드 레이아웃 선언
 Boolean start=false;
 String name[];  //이름을 저장하는 배열.
 int size;
 
 

 public GUIChatServer() {
  setTitle("GUI 채팅 서버 ver 1.0");
 
  Font win_font = new Font("", Font.BOLD, 12); // 글씨 스타일 진하게
  setFont(win_font);
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    dispose(); // 자원 반납후 프레임 닫기
   }// windowClosing
  });// X 클릭시 종료
 
  cl = new CardLayout();
  setLayout(cl);
  name= new String[10];
  Panel port_= new Panel();
  port_.setBackground(Color.DARK_GRAY);// 밝은 회색으로 설정
  port_.setLayout(new BorderLayout());
  bt_connect = new Button("서버 시작"); // 서버 접속 버튼 생성
  bt_connect.addActionListener(this);
  txt_port = new TextField("1000", 15);
  Panel port_set = new Panel();
  port_set.add(new Label("Port Number  :  "));
  port_set.add(txt_port);
  port_set.add(bt_connect);
 
  vChatList = new Vector();
  Panel ing = new Panel();
  btnExit = new Button("서버 종료");
  btnExit.addActionListener(this);
  ta = new TextArea();
  ing.add(ta, BorderLayout.CENTER);
  ing.add(btnExit, BorderLayout.SOUTH);

  setBounds(300, 300, 500, 450);
  add(port_set, "포트 설정");
  add(ing, "서버 동작");
  cl.show(this, "포트 설정");
  setVisible(true);// 보이기
  chatStart(); // 채팅 메소드 시작
 
 


 }// 생성자

 public void chatStart() { // 채팅 시작
  try {
   while(true){

    if(start==true)
     break;
   }
   port=Integer.parseInt(txt_port.getText());
   ss = new ServerSocket(port);// 포트번호
   while (true) { // 무한 반복
    sockClient = ss.accept(); // 클라이언트 올 때마다 소켓 생성
    ta.append(sockClient.getInetAddress().getHostAddress()+ "님이 접속하셨습니다.\\n");
    ChatHandle threadChat = new ChatHandle();// 한명씩 처리
    vChatList.add(threadChat);// 리스트에 담는다.
    threadChat.start(); // ChatHandle 쓰레드 시작
   }// while
  } catch (Exception e) {
   e.printStackTrace();
  }// catch
 
 }// ServerStart

 public void actionPerformed(ActionEvent e) {
  try{
   Object obj=e.getSource();
   if(obj==btnExit){
    dispose(); // 윈도우 자원 반납후 닫기
   }
   else if(obj==bt_connect){ //서버접속키를 눌럿을때.
    cl.show(this, "서버 동작");
    start=true;
   }
  }
  catch(Exception ex){
   ex.printStackTrace();
  }
  // 서버 종료 버튼 클릭시
 
 }// actionPerformed

 public static void main(String[] args) {
  new GUIChatServer();
 }// main

 // 클라이언트 채팅을 처리하는 Thread 를 상속받은 내부 클래스
 class ChatHandle extends Thread {
  BufferedReader br = null; // 입력 담당
  PrintWriter pw = null; // 출력 담당

  public ChatHandle() {
   try {
   
    InputStream is = sockClient.getInputStream();// 입력
    br = new BufferedReader(new InputStreamReader(is));
    OutputStream os = sockClient.getOutputStream();// 출력
    pw = new PrintWriter(new OutputStreamWriter(os));
   } catch (IOException e) {
    e.printStackTrace();
   }// catch
  }// 내부 클래스의 기본 생성자

  public void sendAllClient(String msg) {// 모두에게 채팅 내용 전송
   try {

    int size = vChatList.size();// 채팅 사용자의 수를 얻는다.
    for (int i = 0; i < size; i++) {
     // 반복문을 돌면서 한 사람씩 채팅 내용을 보낸다.
    
     ChatHandle chr = (ChatHandle) vChatList.elementAt(i);
     chr.pw.println(msg); // 사용자 한 사람의 채팅 내용 전송
     chr.pw.flush(); // 버퍼의 내용을 즉시 전송하라.

    }// for
   } catch (Exception e) {
    e.printStackTrace();
   }// catch
  }// send_All

  public void run()
  {
   try
   {
    Boolean id_ch=false;

    while (!id_ch)
    {
     size = vChatList.size();// 채팅 사용자의 수를 얻는다.

     name[size-1]= br.readLine(); //서버로부터 아이디를 입력받는다.
     id_ch=true;

     if(size==1)
     {
 
      pw.println("0");//첫 사람은 아이디 중복 체크가 필요없으니까 0을 보내준다.
      pw.flush();
      sendAllClient(name[size-1] + " 님께서 새로 입장했습니다");
     }
     for (int i = 0; i < size-1; i++)
     {


      if (name[size-1].equals(name[i]))
      { //만약 이전 사용자와 아이디가 같다면 1을 보낸다.
       id_ch=false;
       pw.println("1");
       pw.flush();
      }
      
     }
     // 사용자 닉네임 얻기
     if((id_ch==true)&&size!=1)
     {
 
      pw.println("0");  //이전사용자와 아이디가 같지 않다면 0을 보내낟.
      pw.flush();
      sendAllClient(name[size-1] + " 님께서 새로 입장했습니다");
     }
    }
   
    String id=br.readLine();
    while (true)
    { // 무한 반복
 
     String msg = br.readLine();// 채팅 내용 받기
     String str = sockClient.getInetAddress().getHostName();
     ta.append(id+" : "+ msg + "\\n"); // 채팅 내용 ta 에 보기
     if (msg.equals("@@Exit"))
     {// 사용자가 @@Exit를 입력하면
      break; // 반복문 종료(채팅 끝)
     }
     else
     {
      sendAllClient(id + " : " + msg);// 모두에게 채팅내용 전송
     }// else
    }// while
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
   finally
   {
    vChatList.remove(this);// 사용자 한 명 지우기
    try
    {
     br.close();
     pw.close();
     sockClient.close();
    }
    catch (Exception e)
    {
    }// catch
   }// finally
   }// run
 }// 내부 클래스 ChatHandle 의 끝
}// end

 

 

 

 

------------------------------클라이언트-------------------------------------

package ex;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.*;

public class GUIChatClient extends JFrame implements Runnable,ActionListener{
 JPanel cardPane, connectPane, chatPane;
 JLabel  msg;
 JButton btn_connect, btn_send, btn_exit,btn_list;
 JTextField txt_server_ip, txt_port, txt_input;
 TextArea txt_list;
 CardLayout card;
 String name=null;
 String ip;
 int port;
 HumanList hl=new HumanList();
 
 Socket s; //채팅용 소켓
 BufferedReader br; //입력
 PrintWriter pw; //출력
 String str; //채팅 내용을 담을 변수
 String data; //임시변수
 boolean id_check=false;


 public GUIChatClient()
 {
  ConnectPane();
  ChatPane();
  
  setTitle("Chatting Client(ver 1.0)");
  
  
  //card-----------------------------
  cardPane = new JPanel();
  card = new CardLayout();
  cardPane.setLayout(card);
  cardPane.add(connectPane,"접속창");
  cardPane.add(chatPane,"채팅창");
  card.show(cardPane, "접속창");
  //----------------------------------
  add(cardPane);
  setSize(400,300);
  setVisible(true);
  setResizable(false);
  
  addWindowListener(
   new WindowAdapter(){
    public void windowClosing(WindowEvent e)
    {
     System.exit(0);
    }
   }
  );
  
  
 }
 public void ConnectPane()
 {
  

  connectPane = new JPanel();
  JPanel pn=new JPanel();
  JPanel pn1 = new JPanel();
  JPanel pn2 = new JPanel();
  
  msg = new JLabel("IP와 PORT를 입력하시오");
  msg.setFont(new Font("굴림체", Font.BOLD, 15));
  msg.setForeground(Color.magenta);
  
  JLabel lb1 = new JLabel("서버 I P : ");
  txt_server_ip = new JTextField("", 15);
  pn1.add(lb1);   
  pn1.add(txt_server_ip);
  
  
  JLabel lb2 = new JLabel("포트 : ");
  txt_port = new JTextField("",15);  
  pn2.add(lb2);  
  pn2.add(txt_port);
  
  
  pn.add(pn1);    
  pn.add(pn2); 
  pn.add(msg);
  
  btn_connect = new JButton("Connection");
  
  connectPane.setBorder(BorderFactory.createTitledBorder("다중채팅화면"));
  connectPane.setLayout(new BorderLayout());
  connectPane.add(pn,"Center");
  connectPane.add(btn_connect,"South");

  
  btn_connect.addActionListener(this);

 }
 
 public void ChatPane()
 { 
 
  chatPane = new JPanel();
  JPanel  pn3 = new JPanel();
  txt_list = new TextArea("", 1, 1, txt_list.SCROLLBARS_BOTH);

  txt_input = new JTextField("",20);
  btn_send = new JButton("전송");
  btn_exit = new JButton("종료");
  btn_list = new JButton("사용자");

  pn3.setBorder(BorderFactory.createTitledBorder("☆대화하기☆"));
  chatPane.setBorder(BorderFactory.createTitledBorder("♣채팅내용♣"));
  pn3.add(txt_input);   pn3.add(btn_send);  pn3.add(btn_list); pn3.add(btn_exit);
  
  chatPane.setLayout(new BorderLayout());
  chatPane.add(txt_list, "Center");
  chatPane.add(pn3, "South");
  
  txt_input.addActionListener(this);
  
 
  btn_list.addActionListener(this);
  btn_exit.addActionListener(this);
  btn_send.addActionListener(this);
  
 }

 public void actionPerformed(ActionEvent e)
 {
  Object obj = e.getSource();
  
  if(obj == btn_connect)
  {
   setSize(470,300);
   ip=txt_server_ip.getText();
   port=Integer.parseInt(txt_port.getText());
   try
   {
    s = new Socket(ip,port);
   }
   catch (UnknownHostException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
   catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }//서버IP, 서버_포트
   Thread ct = new Thread(this);//친구 차(쓰레드)에 같이 탄다.
   ct.start(); //쓰레드 시작
   card.show(cardPane, "채팅창");
   
  }
  
  if(obj==btn_send || obj == txt_input)
  {
   
   str=txt_input.getText();//tf에서 채팅 내용을 읽어온다.
   pw.println(str);
   pw.flush();
   txt_input.setText("");//tf를(입력 준비 상태인)빈칸으로 셋팅한다.
   
  }
  
  if(obj==btn_list)
  {

   hl.setVisible(true);
   
  }
  if(obj==btn_exit)
  {
   System.exit(0);
  }

 }

 public void run()
 {
  
  try
  {
   
   br = new BufferedReader(new InputStreamReader(s.getInputStream()));
   pw = new PrintWriter(s.getOutputStream(), true);//true는 즉시전송
   while(!id_check)
   {
    String key;
    name = JOptionPane.showInputDialog("아이디를 입력하세요(중복되지 않는 아이디);");  //아이디 입력받는 함수.
    pw.println(name);
    pw.flush();
    
    key=br.readLine();
    if(key.equals("0"))
    {
     pw.println(name);
     pw.flush();
     
     break;
    }
    else
    {
     JOptionPane.showMessageDialog(null, "대화명 중복!");
    }
   }
      txt_input.requestFocus();
   while((data = br.readLine())!= null)
   {
    txt_list.append(data + "\\n");//\\n은 줄바꿈
   }//while
  }
  catch (IOException e)
  {
   System.out.println("생성자에서 예외 발생 : " + e);
  }//ca
  catch (Exception e)
  {
   System.out.println("소켓에서 채팅 내용읽는 중 에러발생");
  }//catch
 }//run

 public static void main(String[] args)
 {
  new GUIChatClient();
 }
 
 
 
}

 

 

 


 

------------------------사용자목록을 넣고싶은 클래스  JList가 있는--------------

package ex;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.*;

public class HumanList extends JFrame
{
 JList lm=new JList();
 JButton bt = new JButton("확인");

 


 public HumanList()
 {
 
  
  setTitle("왜안되..");
  setBounds(400,300,150,300);
  setLayout(null);
  
  lm.setBounds(0,0,150,230);
  bt.setBounds(37,240,70,30);
  add(lm);
  add(bt);
  
 
  setResizable(false);
  
 
 }
 

 

 


}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
288298 냄새나는 코드 폐인의세계갤로그로 이동합니다. 11.11.15 59 0
288297 형들 나 어셈블리어 질문할꺼 있어서 질문좀할라고..완전초보야 [1] 갭촙(175.122) 11.11.15 59 0
288296 이제 중2 올라가는데요, 지금 시작해도 안늦나요? [2] 초딩6(59.13) 11.11.15 77 0
288292 아, 미친 쥐새끼가 스토킹 시작했네. 그냥 저 병신은 블럭해야겠다. ㅇㅇㅇ(121.144) 11.11.15 62 0
288289 저번에 어떤 유태인에 코주부라면서 놀렸는데 너무했나 장난이였는데 [22] Stan(220.244) 11.11.15 270 0
288288 형님들 [1] 초짜(61.81) 11.11.15 54 0
288286 산업체가기 vs 김태희랑 결혼하기? [2] ㅈㅈㅈㅈ(121.135) 11.11.15 112 0
288283 logcat을 쓰니까 thread관리도 편해져서 Stan(220.244) 11.11.15 52 0
288282 이제 중1 올라가는데요, 지금 시작해도 안늦나요? [3] 초딩6(59.13) 11.11.15 99 0
288281 skt는 좋겠다 kt가 자살골 막 넣어주니까 [3] HarlemLuiah갤로그로 이동합니다. 11.11.15 92 0
288279 C++ 매크로 최악의 케이스. [2] 진짜냐?(218.54) 11.11.15 189 0
288278 제로보드 같이 게시판 자동 생성기를 만들려고 하는데 [1] 안성철(211.197) 11.11.15 68 0
288277 힘든 하루였다. [2] Gromit갤로그로 이동합니다. 11.11.15 69 0
288276 람다좀 가르쳐줄 형 없음? [10] ㅈㅂㄷㅂㄷ(220.78) 11.11.15 95 0
288274 프갤형들 졸업프로젝트를 해야되는데 동영상 플레이어 소스 어디서 구해? [1] 김졸업(117.16) 11.11.15 74 0
288271 AI 캐릭터의 개발이 시급하다 [3] 분당살람갤로그로 이동합니다. 11.11.15 128 0
288268 C++ #define 쓰면 안되는 이유 코드로 보여드림 [12] 유동닉ㅈㅅ(211.232) 11.11.15 263 0
288265 근데 한국은 스맛폰 OS만 없는 게 아니라 [3] 분당살람갤로그로 이동합니다. 11.11.15 142 0
288264 너네 C++로 코딩할떄 #define 쓰지마라 [8] 유동닉ㅈㅅ(211.232) 11.11.15 237 0
288262 어제 이사님한테 제발 어플 좀 만드는데 투입해 달라고 부탁함.. [4] 쿄스케갤로그로 이동합니다. 11.11.15 104 0
288261 회사다니면서 플젝하면 여러사람이랑 같이 일하자나 [2] 길가던놈갤로그로 이동합니다. 11.11.15 98 0
288260 Things make to remember my name.swf [3] Stan(220.244) 11.11.15 91 0
288259 야 이펙티브C++ 책 구라 안까고 다 이해한 프갤러 있냐 [5] 유동닉ㅈㅅ(211.232) 11.11.15 138 0
288258 ajax로 불러온 php문서안의 echo + 자바스크립트는 실행안되나요? [3] 민트(68.107) 11.11.15 73 0
288257 억 일베 보니까 곽횽이랑 50플 넘겨야지 프갤러 되는 거였네.. [4] 쿄스케갤로그로 이동합니다. 11.11.15 105 0
288256 여자랑 작업하면 좋다... 쿄스케갤로그로 이동합니다. 11.11.15 105 0
288254 c 언어 파일 입출력(복사 하는거) 답 iljeomobolt갤로그로 이동합니다. 11.11.15 73 0
288253 data structure의 동기화 방법의 관례? [1] 비밀의계곡갤로그로 이동합니다. 11.11.15 80 0
288251 여자들과 같이 일해보고 싶다~~~ [1] 거칠게갤로그로 이동합니다. 11.11.15 123 0
288250 여자에게 어그로 끄는 법 [2] 거칠게갤로그로 이동합니다. 11.11.15 145 0
288249 공대 아름이가 늘고있다니! [2] 일광면(119.198) 11.11.15 119 0
288248 whitepaper datasheet 차이 [1] 아이티바보(211.112) 11.11.15 36 0
288247 보통 신입 들어오면 몇 달만에 도망가??? [3] 거칠게갤로그로 이동합니다. 11.11.15 272 0
288245 C언어에서 파일입출력관련해서 [3] Snow(210.115) 11.11.15 89 0
288244 로또 vs 연금 복권 [4] 거칠게갤로그로 이동합니다. 11.11.15 92 0
288243 천회장// 루비언어 좋음여? [3] 자바인(211.117) 11.11.15 112 0
288242 클라우드 서비스 이용해서 애플리케이션 개발하면 [1] (210.90) 11.11.15 77 0
288241 큰 수 5개 [3] 천회장(112.219) 11.11.15 77 0
288239 잠이덜깨 비몽사몽하지만 점심시간과 三didas갤로그로 이동합니다. 11.11.15 59 0
288238 좋은 하루보내고계십니까들? 三didas갤로그로 이동합니다. 11.11.15 29 0
288236 WPF에서 변경사항이 있을때 호출되는 메서드가 뭐야? [1] 해물(61.81) 11.11.15 46 0
288234 자바에서 배열 100개가 있고 숫자가 섞여있을때 가장 큰수부터 5개 뽑으 [11] 자바인(211.117) 11.11.15 271 0
288233 정보통신기사 난이도 어떰? [1] 남대생.갤로그로 이동합니다. 11.11.15 163 0
288232 혹시 BCGsoft MFC ㅊㅊ(222.112) 11.11.15 56 0
288231 플밍 잘하는 횽들 좀 도와줘 [2] 플밍어려워(123.109) 11.11.15 66 0
288230 여기 짤방 v3 버전이 얼마더라 -.-; [3] iljeomobolt갤로그로 이동합니다. 11.11.15 117 0
288229 컴퓨터 공학도인데 질문점 쌀게요 [5] 김딸똘갤로그로 이동합니다. 11.11.15 122 0
288228 목소리 변할까봐 살도 못빼고.. iljeomobolt갤로그로 이동합니다. 11.11.15 45 0
288227 니가와 내밥말아무... iljeomobolt갤로그로 이동합니다. 11.11.15 41 0
288226 프레디 가 죽었을때 참 축격이었어 ... iljeomobolt갤로그로 이동합니다. 11.11.15 45 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2