벡터에서 값뽑아오기 ㅡ,ㅡ모든 소스올려요 좀 알려주세요..
찬놀
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.vector;
public class chatclient extends jframe implements runnable, actionlistener, mouselistener{
private static socket socket;
private static objectoutputstream oos;
private static objectinputstream ois;
private textarea output;
private textfield input;
private static string name;
private container contentpane;
private font dialogfont;
private jpanel panel, panel1, panel2;
private jmenubar mb;
private jmenu startmenu, editmenu;
private jmenuitem connect, out, change, userall;
private jbutton bconnect, bchange, buser, bout, bpeer;
private jtoolbar toolbar;
private toolkit toolkit;
private string ip, port, user;
private thread t;
private changedialog cd;
private list list;
private jlabel userlabel;
//서버에서 보내준 사용자 명단이 들어있는 벡터를 선언
private vector userlist;
public chatclient(){
super(채팅 클라이언트 ver 1.3(2001/6/17));
ip = 127.0.0.1;
port = 10001;
user = guest;
socket = null;
oos = null;
ois = null;
dialogfont = new font(dialog, font.plain, 12);
toolkit = toolkit.getdefaulttoolkit();
maketoolbar();
userlabel = new jlabel( [ 대 화 창 ] [접속자 목록]);
userlabel.setfont(dialogfont);
output = new textarea();
output.seteditable(false);
input = new textfield();
input.addactionlistener(this);
list = new list();
list.addmouselistener(this);
panel1 = new jpanel(new borderlayout());
panel1.add(output, borderlayout.center);
panel1.add(list, borderlayout.east);
panel2 = new jpanel(new borderlayout());
panel2.add(userlabel, borderlayout.north);
panel2.add(panel1, borderlayout.center);
panel = new jpanel(new borderlayout());
panel.add(panel2, borderlayout.center);
panel.add(input, borderlayout.south);
contentpane = this.getcontentpane();
contentpane.setlayout(new borderlayout());
contentpane.add(toolbar, borderlayout.north);
contentpane.add(panel, borderlayout.center);
t = new thread(this);
cd = new changedialog(this, 사용자 정보변경);
}public void run(){
try{
while(true){
string s = null;
string peerfrom = null;
try{
byte req = (byte)ois.readobject();
//전달된 데이터가 대화내용일 경우
if(req.bytevalue() == chat_def.s_t){
s = (string)ois.readobject();
if(s==null){
output.append(\nconnection close);
return;
}
output.append(\n+s);
//전달된 데이터가 접속자 명단(vector)인경우
}else if(req.bytevalue() == chat_def.s_u){
userlist = (vector)ois.readobject();
for(int i=0; i5; i++){
//벡터안에서 접속자 이름을 하나씩 뽑아낸다.
string username = (string)userlist.elementat(i);
//접속자 명단을 보여주기 위한 list에 위에서 뽑아낸 이름을 추가한다.
list.add(username);
}
//서버가 1:1요청에 대한 정보를 넘겨줄경우..요청당한 클라이언트에 1:1창을 띄운다.
}else if(req.bytevalue() == chat_def.s_pr){
system.out.println(comming s_pr);//디버그용
s = (string)ois.readobject();
peerdialog pd = new peerdialog(this, oos, ois, name, s, 1:1 대화창);
pd.setvisible(true);
}else
return;
}catch(exception e){
e.printstacktrace();
}
}
}catch(exception e){
output.append(\n+e);
}
}//end run()
private void maketoolbar(){
toolbar = new jtoolbar();
image img0 = toolkit.getimage(images/connect.jpg);
bconnect = new jbutton(new imageicon(img0));
bconnect.setfont(dialogfont);
bconnect.settooltiptext(연결);
bconnect.setenabled(true);
bconnect.addactionlistener(this);
image img1 = toolkit.getimage(images/disconnect.jpg);
bout = new jbutton(new imageicon(img1));
bout.setfont(dialogfont);
bout.setenabled(true);
bout.settooltiptext(종료);
bout.addactionlistener(this);
image img2 = toolkit.getimage(images/change.jpg);
bchange = new jbutton(new imageicon(img2));
bchange.setfont(dialogfont);
bchange.setenabled(true);
bchange.settooltiptext(정보변경);
bchange.addactionlistener(this);
image img3 = toolkit.getimage(images/login.jpg);
buser = new jbutton(new imageicon(img3));
buser.setfont(dialogfont);
buser.setenabled(true);
buser.settooltiptext(접속자목록);
buser.addactionlistener(this);
image img4 = toolkit.getimage(images/peer.jpg);
bpeer = new jbutton(new imageicon(img4));
bpeer.setfont(dialogfont);
bpeer.setenabled(true);
bpeer.settooltiptext(1:1 통신);
bpeer.addactionlistener(this);toolbar.add(bconnect);
toolbar.addseparator();
toolbar.add(bchange);
toolbar.addseparator();
toolbar.add(buser);
toolbar.addseparator();
toolbar.add(bpeer);
toolbar.addseparator();
toolbar.add(bout);
toolbar.setfloatable(true);
}//end makebar
public void end(){
&nbsbsp;system.exit(0);
}
public void closestream(){
try{
oos.close();
ois.close();
}catch(exception e){
}
}
public void connectserver(){
try{
socket = new socket(ip, integer.parseint(port));
oos = new objectoutputstream(socket.getoutputstream());
ois = new objectinputstream(socket.getinputstream());
boolean in=true;
while(in){
try{
user = joptionpane.showinputdialog(null,아이디 입력하세요,아이디,
joptionpane.information_message);
if (!user.equals() ) in=false;
else { system.exit(0);}
}catch(nullpointerexception e){system.exit(0); }
}
name = user;
try{
write2server(접속자 : +name);
}catch(exception e){
e.printstacktrace();
}
t.start();
}catch(exception e){
try{
socket.close();
ois = null;
oos = null;
socket = null;
}catch(exception me){
}
}
}//end connectserver
public void setip(string val){
ip = val;
}
public string getip(){
return ip;
}
public void setport(string val){
port = val;
}
public string getport(){
return port;
}
public void setuser(string val){
user = val;
name = val;
}
public string getuser(){
return user;
}
public font getdialogfont(){
return dialogfont;
}
//리스트항목을 선택했을 경우의 이벤트...결국 1대1 통신을 연결하기 위한 이벤트처리(대상자의 활성화)
public void mouseclicked(mouseevent e){
try{
if(e.getclickcount() == 2){
string item = list.getselecteditem();
}//endif
}catch(exception e1){
e1.printstacktrace();
}
}
public void mouseentered(mouseevent e){
}
public void mouseexited(mouseevent e){
}
public void mousepressed(mouseevent e){
}
public void mousereleased(mouseevent e){
}
//버튼에 대한 이벤트처리
public void actionperformed(actionevent e){
if(e.getsource()==input){
try{
write2server(name+--+input.gettext());
}catch(exception ex){
ex.printstacktrace();
}
input.settext();
}else if(e.getsource() == bconnect){
connectserver();
}else if(e.getsource() == bout){
end();
}else if(e.getsource() == bchange){
cd.update();
cd.setlocationrelativeto(contentpane);
cd.setvisible(true);
//1:1채팅 버튼을 눌렀을 경우의 이벤트
}else if(e.getsource() == bpeer){
string item = list.getselecteditem();//리스트상에서 활성화된 대상자의 이름을 얻어낸다.
peerdialog pd = new peerdialog(this, oos, ois, item, name, 1:1 대화창);//1:1창 활성화
//클라이언트는 서버에게 자신의 이름과 1:1채팅의 대상의 이름을 프로토콜과 함께 전송
try{
oos.writeobject(new byte(chat_def.c_pr));
system.out.println(sending s_pr);//디버그용
oos.writeobject(name);
oos.writeobject(item);
oos.reset();
}catch(exception e1){
e1.printstacktrace();
}
pd.setvisible(true);
//사용자 명단을 요구하는 버튼을 눌렀을경우의 이벤트
}else if(e.getsource() == buser){
//여기서는 단지 사용자 명단을 요구하는 byte만 써주면 된다.
//만약 이것에 대한 응답이 서버쪽에서 체크되어 벡터를 클라이언트로 써주게 된다면...
try{
oos.writeobject(new byte(chat_def.c_u));
oos.reset();
}catch(exception xe){
xe.printstacktrace();
}
list.removeall();
system.out.println(updated);
}
}
//서버로 멀티채팅시의 채팅내용을 보낸다.
public void write2server(string s){
try{
oos.writeobject(new byte(chat_def.c_t));
oos.writeobject(s);
oos.reset();
}catch(exception e){
e.printstacktrace();
}
}
public void changeusernameupdate(){
//지금 연결되어 있는 server connection의 이름을 지금 변경한 이름으로 바꾸어 주고 서버에 연결된
//모든 클라이언트에게 변경된 이름을 알려주기위하여 서버에 전달
try{
write2server(접속자 : +name);
}catch(exception e){
e.printstacktrace();
}
}
public static void main(string args[]){
jframe frame = new chatclient();
frame.addwindowlistener(new windowadapter(){
public void windowclosing(windowevent e){
system.exit(0);
}
});
frame.pack();
frame.setsize(500,400);
frame.setlocation(9,9);
frame.setvisible(true);
}
}
아무리 생각해두 답이 안나오네요... 클라이언트 소스코드 전체를 올려봐요...왜 서버에 접속하는 사람의 리스트를 못받아오는걸까요? 벡터 안의 접속자 목록을 뽑아서 리스트목록에 추가해 줘야하는데
안되네요 아시는분 좀 알려주세요 전 모르겠네요...