디시인사이드 갤러리

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

갤러리 본문 영역

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

봉봉(112.144) 2011.11.14 20:50:53
조회 109 추천 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 - -
288215 히발라야 레알 듸즤겄네 - _-) [2] 땡칠도사갤로그로 이동합니다. 11.11.15 98 0
288214 방금 글올렸는데 여기서 어떻게 해야할까 ㅜ 돌파구가 안보여 ㅜ [11] ㅇㅇ(110.11) 11.11.15 130 0
288213 형들 C언어 파일 입력좀 도와줭 [9] dd(211.196) 11.11.15 123 0
288212 여기서 국어편차 수학편차 어떻게 할까 ㅜㅜ [2] ㅇㅇ(110.11) 11.11.15 56 0
288211 아.. 과제셔틀은 웁니다.. [1] Aven갤로그로 이동합니다. 11.11.15 67 0
288210 죽겠다...ㅡ.,ㅡ 이문동쮸쮸바갤로그로 이동합니다. 11.11.15 47 0
288209 프갤형들 [3] ㅇㅇ(112.171) 11.11.15 77 0
288208 날씨가 추워지니 벌써 과메기가 나왔군... [1] 이문동쮸쮸바갤로그로 이동합니다. 11.11.15 75 0
288207 개 씨팔 [2] PoRO갤로그로 이동합니다. 11.11.15 52 0
288205 형들 제발가르켜주세요 [1] 허졉(115.140) 11.11.15 43 0
288202 헬지 유플러스 [1] sxvc(124.49) 11.11.15 42 0
288200 인생사 새옹지마 고기(58.122) 11.11.15 52 0
288199 데이터 커뮤니케이션 강의 [1] 三didas갤로그로 이동합니다. 11.11.15 45 0
288198 동원참치캔, 런천미트 캔 [1] 5ㅁㅁ(183.101) 11.11.14 28 0
288197 느그들 대머리 사건 대법원 판결 난거 봤냐? [2] 시불라미갤로그로 이동합니다. 11.11.14 165 0
288195 게임 프로그래머가 꿈이고 1995년생 17살인 사람 봐주세요!!!!!!! [17] 하이(58.148) 11.11.14 331 0
288194 으헝하앟 API ... [6] RedRum갤로그로 이동합니다. 11.11.14 103 0
288193 2010 사용법좀 ;;;; [6] ㅇㅇ(121.128) 11.11.14 106 0
288191 아옳아롱호호롱로롷 ㅁ머(125.177) 11.11.14 25 0
288189 항상 반드시 최대한 오래 살아라. ㄷㄹ(211.189) 11.11.14 37 0
288188 형들 C언어 질문좀 받아줘 [10] 스카치테이프(175.117) 11.11.14 123 0
288185 횽등 stl 시간복잡도 잘하는 횽들 없나? 인터넷 찾아도 찾기가 힘들어서 [13] 7830뭇(123.109) 11.11.14 201 0
288184 아침 해가 떴습니다~ 땡칠도사갤로그로 이동합니다. 11.11.14 49 0
288183 숫자야구게임이 그냥 숫자맞추기게임이었네 길가던놈갤로그로 이동합니다. 11.11.14 55 0
288181 시볼라미 행님 ㅠ [4] RedRum갤로그로 이동합니다. 11.11.14 57 0
288180 6.0 포기해야겠음 [2] dd(121.128) 11.11.14 73 0
288178 API - altimage.h 에서 오류나는것 같아요... [1] RedRum갤로그로 이동합니다. 11.11.14 598 0
288176 형들 visual c++ 6.0 서비스팩 설치가 안되 [8] ㅇㅇ(121.128) 11.11.14 248 0
288174 c언어 질문 ㅋ [4] 123(112.221) 11.11.14 70 0
288172 DWORD 형 복사 ㅇㅇ(210.91) 11.11.14 41 0
288171 앱광고로 담배값(하루 한갑기준) 벌려면 시불라미갤로그로 이동합니다. 11.11.14 105 0
288170 3DS 살꺼야 y녀6디리(220.118) 11.11.14 50 0
288169 안녕하세요 c언어를 공부하는데 질문좀 해도 될까요 [2] c의노예(112.221) 11.11.14 70 0
288168 시스템 프로그래밍을 좀 하고 싶은데 문제 은행? 이런거 인터넷에 없을까요 [1] Lz(125.128) 11.11.14 66 0
횽들..자바 채팅사용자 리스트에 뜨게하고싶은데.. 봉봉(112.144) 11.11.14 109 0
288165 자바 JFrame 바꾸는 법? 자바(121.136) 11.11.14 49 0
288164 쇼핑몰 만드는데 후이즈가 나을까, 가비아가 나을까 프레지(210.106) 11.11.14 99 0
288162 프갤러들아 빨리 bmp크기조절하는 법좀 알려줘 [7] 이세상끝에서갤로그로 이동합니다. 11.11.14 95 0
288161 형님들 도움좀요 ㅜㅜ DWORD형을 char*형에 나눠담아야하는데... [5] ㅁㄴㅇ(222.114) 11.11.14 97 0
288159 ssd [1] 이모군(175.114) 11.11.14 52 0
288158 페이스북같은데는 어떻게 수익이 나는거임? [8] 유동생(218.152) 11.11.14 193 0
288157 지금 돌아보니 점수맞춰서 컴공온게 잘한짓인가 생각이 든다 [7] ㅇㅇ(112.184) 11.11.14 197 0
288156 데이터베이스 초보가 보기 좋은 책좀 알려주세요! 횽들!@@!(175.197) 11.11.14 72 0
288155 드림스파크 사우스파크 드림스파크 사우스파크 드림스파크 사우스파크 [1] ㅇㅇ(112.184) 11.11.14 56 0
288154 1년이 끝나지 않았지만 만족스러운 1년 이었다. 치킨맛맛폰갤로그로 이동합니다. 11.11.14 71 0
288153 형들ㅋㅋㅋ 어플만들때 있자너 개발환경 뭐뭐 있어?? [7] 없쥐갤로그로 이동합니다. 11.11.14 130 0
288150 몸이 나을시간이 없는듯.. [7] 일광면(119.198) 11.11.14 202 0
288149 잠을 자도자도 졸릴땐 뭐다? [3] System32갤로그로 이동합니다. 11.11.14 133 0
288148 stan 은 봅니다 [9] qwer(169.229) 11.11.14 223 0
288147 질문좀 드리겠습니다 한울기둥(115.90) 11.11.14 47 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2