음...


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :윤경구 1998년 5월 20일 11:56:00

In Reply to: 말씀하신데로 main에 try~catch문을넣어는데 error.. posted by 고경환 on 1998년 5월 20일 10:06:42:

올려 놓은 소스는 일단 컴파일이 안되는군요.
쩝...
어떻게 실행을 시키는지가 궁금하군요.
컴파일이 되는 소스를 올려 주세요.
컴파일이 되도록 아무 생각없이 에러 메시지만 잡아 보았는데
이거라도 도움이 될지...
(프로그램 로직은 전혀 신경쓰지 않았습니다.)

// ChatServer.java
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Date;
import java.text.SimpleDateFormat;


class ChatServer
{
static Vector[] gworker = new Vector[10];//vector 배열(그룹수만큼 늘린다.)
static Vector[] worker_q = new Vector[10];// ''
static String save_title;
static String save_data;


static Vector line_q = new Vector();//대화 내용

public static void main( String[] args )
{
try
{
for(int i = 0;i < gworker.length; i++)
{
gworker[i] = new Vector();
gworker[i].addElement("");
worker_q[i] = new Vector();
worker_q[i].addElement("");
}

ServerSocket server = new ServerSocket(6666);
new Broadcaster().start();

for(;;)//반복해서 요청을 체크
{
Socket worker = server.accept();//요청이 들어왔는지 확인하고 왔으면 응답을 준다.
initialize(worker);//요청을 실행

}
}catch(IOException ie)
{
System.out.println("main ioException");
}

}


private static void initialize(Socket worker)//요청들어오면 한번만들어진다.
{
String tt = "";
String dd = "";
String name = "";
String temp = "";
String vsgroup;
String Server_title = "";
String Server_branch = "";
String m ="";

int gindex = 0;

try
{

System.out.println("start initialize");

BufferedReader reader = new BufferedReader(new InputStreamReader( worker.getInputStream()) );
Writer writer = new OutputStreamWriter(worker.getOutputStream());

String line = reader.readLine();
ClientSocket clientsocket = new ClientSocket(worker,reader,writer);
if(line.startsWith("**name**"))
{

int vigroup = line.indexOf('$');
vsgroup = line.substring(vigroup+1);//group

name = line.substring(8,vigroup);//name

int inttitle = line.indexOf('?');
Server_title = line.substring(inttitle+1,vigroup);//주제

int intbranch = line.indexOf('@');
Server_branch = line.substring(intbranch+1,inttitle);//분야


writer.write(name + "씨 환영합니다.\r\n");
writer.flush();
for(int i = 0;i < gworker.length; i++)
{

temp =((String)ChatServer.gworker[i].firstElement());

if(vsgroup.equals(temp))
{
ChatServer.gworker[i].addElement(name);
ChatServer.worker_q[i].addElement(clientsocket);
tt = "eql";
gindex = i;
}

if(tt.equals("eql"))
break;
}

if(tt.equals("eql"))
{}
else
{
for(int i = 0;i < gworker.length; i++)
{
if(((String)ChatServer.gworker[i].firstElement()).equals(""))
{
ChatServer.gworker[i].removeElementAt(0);
ChatServer.gworker[i].addElement(vsgroup);
ChatServer.gworker[i].addElement(name);
ChatServer.worker_q[i].removeElementAt(0);
ChatServer.worker_q[i].addElement(vsgroup);
ChatServer.worker_q[i].addElement(clientsocket);
dd = "end";
gindex = i;

ChatServer.file_save_header(Server_title,vsgroup,Server_branch);

}
if(dd.equals("end"))
break;
}
}

for(int i=0;i {
for(int j=0;j System.out.println("temp"+i+","+j+"=="+((String)ChatServer.gworker[i].elementAt(j)));
}

if(ChatServer.gworker[gindex].size() > 0) name_list(writer,vsgroup,gindex);//사용자 현황.
else writer.write("현재 사용자가 아무도 없습니다.\r\n");
writer.flush();
}
//writer.close(); -> 닫으면 소켓도 같이 닫기 때문에 주의

if(worker_q[gindex].size() > 0) room_enter(writer,name,gindex);//방에 들어오면 자기 그룹에게 들어온 인사을 한다.


System.out.println("initial gindex="+gindex);
System.out.println("before start Receiver");

new Receiver(clientsocket,name,gindex).start();
}
catch(IOException ie)
{
System.out.println("Writer creation error!");
}

}

static public void name_list(Writer writer,String vsgroup,int gindex)
// throws IOException

{
try
{

int gx;
String vp;

gx = gindex;
vp = vsgroup;

String names = "**names**";

for(Enumeration e = ChatServer.gworker[gx].elements(); e.hasMoreElements();)
names = names + (String)e.nextElement() + "|";
names += "\r\n";
writer.write(names);
} catch(IOException ei)
{
System.out.println("name_list ioexception");
}
}

static public void room_enter(Writer writer,String name,int gindex)
// throws IOException
{
int enter_gindex;
String enter_name;

enter_gindex = gindex;
enter_name = name;

String meg = enter_name + "씨께서 이야기 방에 들어 오셨습니다.";
System.out.println(enter_name + "씨께서 이야기 방에 들어 오셨습니다.");

for(int i = 1; i < ChatServer.worker_q[enter_gindex].size(); i++)
{

ClientSocket clientsocket5 = (ClientSocket)ChatServer.worker_q[enter_gindex].elementAt(i);
try
{
System.out.println("room enter all ("+i+")=="+(String)ChatServer.gworker[enter_gindex].elementAt(i));
clientsocket5.writeline(meg + "\r\n");
} catch(IOException ei)
{
clientsocket5.quit();
ChatServer.worker_q[enter_gindex].removeElementAt(i);
ChatServer.gworker[enter_gindex].removeElementAt(i);
i--;
}

}
}

static public void enter_list(String line)
// throws IOException
{
int indexg;
int entersum;
String sumsgroup;
String enter_line;
String enterS_sum;
String enter;

indexg = 0;
enter ="";
enter_line = line;
entersum = enter_line.indexOf('$');
enterS_sum = enter_line.substring(entersum+1);

System.out.println("enter_list start");
System.out.println("list enterS_sum ="+enterS_sum);
String names = "**names**";

for(int j = 0;j < ChatServer.gworker.length; j++)
{
sumsgroup =((String)ChatServer.gworker[j].firstElement());

System.out.println("sumsgroup("+sumsgroup+")enterS_sum("+enterS_sum+")");
if(sumsgroup.equals(enterS_sum))
{
indexg = j;
enter ="enter";
System.out.println("enter_list before indexg"+indexg);
}
else
System.out.println("ChatServer enter_list error");

if(enter.equals("enter"))
break;

}
System.out.println("enter_list after indexg:"+indexg);
for(Enumeration e = ChatServer.gworker[indexg].elements(); e.hasMoreElements();)
{
names = names + (String)e.nextElement() + "|";
}
names += "\r\n";
for(int i = 1; i < ChatServer.worker_q[indexg].size(); i++)
{

ClientSocket clientsocket6 = (ClientSocket)ChatServer.worker_q[indexg].elementAt(i);
try
{
System.out.println("enter_list all ("+i+")=="+(String)ChatServer.gworker[indexg].elementAt(i));
clientsocket6.writeline(names);
} catch(IOException e)
{
clientsocket6.quit();
ChatServer.worker_q[indexg].removeElementAt(i);
ChatServer.gworker[indexg].removeElementAt(i);
i--;
}

}


}

static public String saveDate()
{
/*
try
{
*/

SimpleDateFormat df = new SimpleDateFormat("yyyy년 M월 dd일 h시 mm분 ss초");

String today;
Date dat = new Date();
today = df.format(dat);
return today;
/*
display.setText(today);

return display;
}catch(Exception e)
{
System.out.println("saveDate exception="+e.getMessage());
}
*/
}

static public void file_save_header(String save_title,String save_group,String save_branch)
// throws IOException
{

String save_data_header1 = "";
String vsgroup1;
String vsbranch;
String headerdata1;
String headerdata2;
String headerdata3;
String headerdata4;
String headerdata5;
String save_date;

save_data_header1 = save_title;
vsgroup1 = save_group;
vsbranch = save_branch;

save_date = saveDate();

headerdata1 ="소속 그룹 :"+vsgroup1+"\r\n";
headerdata2 ="채팅 분야 :"+vsbranch+"\r\n";
headerdata3 ="채팅 주제 :"+save_data_header1+"\r\n";
headerdata4 ="채팅 시간 :"+save_date+"\r\n";
headerdata5 ="=================================================================="+"\r\n";
try
{

BufferedWriter out =new BufferedWriter(new FileWriter(save_data_header1+".chat"));

out.write(headerdata1);
out.write(headerdata2);
out.write(headerdata3);
out.write(headerdata4);
out.write(headerdata5);

out.close();
}
catch(IOException eff)
{
System.out.println("file_save_header error!"+eff.getMessage());
}

}



static public void file_save_append(String save_title,String save_data)
// throws IOException
{
ChatServer.save_title = save_title;
ChatServer.save_data = save_data;
try
{
BufferedWriter append_out =new BufferedWriter(new FileWriter(save_title+".chat",true));

append_out.write(save_data);
}
catch(IOException ef)
{
System.out.println("file_save_append error!"+ef.getMessage());
}
}


}


class Receiver extends Thread
{
ClientSocket clientsocket;
String name;//요청한 곳에 이름
String talkname;
String go;
String tttalkname;
String talkcontent;
String myname;
String err;
String tempgroup;
String all;
String nn;
String talktitleS;
String talkvariable;

static public String errselect;
static public String talkselect;
static public int talkindex;
static public int nameindex;
static public int errindex;
static public int gindex;
public Receiver(ClientSocket clientsocket, String name,int gindex)
{
System.out.println("start Receiver");

this.clientsocket = clientsocket;
this.name = name;
this.gindex = gindex;
go ="no";
errselect = "err";
all ="";
}
public void run()
{
try
{
System.out.println("Receiver start run");
System.out.println("Receiver gindex="+gindex);
for(String line; (line = clientsocket.readline()) != null; )
{


if(line.startsWith("**talk**"))
{
/* 내용
String tt =talk.getText();//귀속말할 사람.
tt ="**talk**" +tt+"#" + tempname +"%";//보낸사람.
writer.write(tt + input.getText() +"?"+v_title+"$"+v_group+"\r\n");
내용 제목 그룹�
*/
tttalkname = line.substring(8);
int tindex = tttalkname.indexOf('#');

talkname = tttalkname.substring(0,tindex);
int myindex = tttalkname.indexOf('%');
int vp = tttalkname.indexOf('$');
myname = tttalkname.substring(tindex+1,myindex);
int talktitle = tttalkname.indexOf('?');
talktitleS = tttalkname.substring(talktitle+1,vp);

talkcontent = tttalkname.substring(myindex+1,talktitle);
tempgroup = tttalkname.substring(vp+1);

talkvariable = myindex+":귓속말("+talkname+")"+talkcontent+"\r\n";


ChatServer.file_save_append(talktitleS,talkvariable);

System.out.println("talk");
System.out.println("talk ini myname="+myname);
System.out.println("talk ini talkname="+talkname);
System.out.println("talk ini talkcontent="+talkcontent);
System.out.println("talk ini tempgroup="+tempgroup);
System.out.println("talk int talktitles = "+talktitleS);

for(int i = 0;i < ChatServer.gworker.length; i++)
{
nn =((String)ChatServer.gworker[i].firstElement());
System.out.println("nn("+nn+")tempgroup("+tempgroup+")");
if(nn.equals(tempgroup))
{
gindex = i;
all = "all";
}
else
System.out.println("Receiver all names error(368)");

if(all.equals("all"))
break;
}
all = "";
for(int n = 0; n < ChatServer.gworker[gindex].size();n++)
{
if(talkname.equals((String)ChatServer.gworker[gindex].elementAt(n)))
{
System.out.println("talk myname="+myname);
talkindex = ChatServer.gworker[gindex].indexOf(talkname);
nameindex = ChatServer.gworker[gindex].indexOf(myname);
System.out.println("talkindex=="+talkindex);
System.out.println("nameindex=="+nameindex);
go ="non";
ChatServer.line_q.addElement("**talk**" + myname + " : " + talkcontent);

}
}
if(go.equals("no"))
{
System.out.println("no talk gindex="+gindex);
System.out.println("no talk");
System.out.println("myname="+myname);
errindex = ChatServer.gworker[gindex].indexOf(myname);
err = "귓속말할 사용자가 없습니다 확인하시고 재시도..";
ChatServer.line_q.addElement("**talk**" + err + "\r\n");

System.out.println("errindex="+errindex);
clientsocket.writeline("**talk**" + err + "\r\n");
errselect ="errselect";
}
go = "no";
talkselect = "talkselect";

}else if(line.startsWith("**quit**"))
{

tttalkname = line.substring(8);
int qvi = tttalkname.indexOf('$');
tempgroup = tttalkname.substring(qvi+1);
int quittitle = tttalkname.indexOf('?');
talktitleS = tttalkname.substring(quittitle+1,qvi);


System.out.println("quit");
System.out.println("talk ini tempgroup="+tempgroup);

for(int i = 0;i < ChatServer.gworker.length; i++)
{
nn =((String)ChatServer.gworker[i].firstElement());
System.out.println("nn("+nn+")tempgroup("+tempgroup+")");
if(nn.equals(tempgroup))
{
gindex = i;
all = "all";
}
else
System.out.println("Receiver all names error(368)");

if(all.equals("all"))
break;
}

all = "";

System.out.println("quit");
int index = ChatServer.gworker[gindex].indexOf(name);
ChatServer.gworker[gindex].removeElementAt(index);
ChatServer.worker_q[gindex].removeElementAt(index);
ChatServer.line_q.addElement(name + "씨가 이야기 방을 떠났습니다.");
clientsocket.quit();
System.out.println("quit gindex("+gindex+")index("+index+")");
System.out.println(name + " : "+line);

talkvariable ="**********************"+ name + " 씨가 이야기 방을 떠났습니다.********************\r\n";
ChatServer.file_save_append(talktitleS,talkvariable);
}
else if(line.startsWith("**names**")) ChatServer.enter_list(line);
else
{
System.out.println("all names");
int sump = line.indexOf('$');
String sumsgroup = line.substring(sump+1);

int alltitle = line.indexOf('?');
talktitleS = line.substring(alltitle+1,sump);

line = line.substring(0,alltitle);
System.out.println("all names before gindex"+gindex);
for(int i = 0;i < ChatServer.gworker.length; i++)
{
String sumtemp =((String)ChatServer.gworker[i].firstElement());
System.out.println("sumsgroup("+sumsgroup+")sumtemp("+sumtemp+")");
if(sumsgroup.equals(sumtemp))
{
gindex = i;
all = "all";
}
else
System.out.println("Receiver all names error(368)");

if(all.equals("all"))
break;
}

all ="";
System.out.println("all names after gindex="+gindex);
ChatServer.line_q.addElement(name + " : " + line);

talkvariable =name + ":"+line+"\r\n";

ChatServer.file_save_append(talktitleS,talkvariable);

System.out.println(name + " : "+line);
}
}
} catch( IOException e )
{
System.out.println("Service error");
//e.printStackTrace(System.out);
}
/* finally
{ try
{ out.close();
} catch( IOException e )
{ e.printStackTrace(System.out);
}
}
*/
}

}


class Broadcaster extends Thread
{
public void run()
{
System.out.println("Broead started run.");
while(true)
if (!ChatServer.line_q.isEmpty())
{

System.out.println("Broadcaster line_q is not empty.");
String line = (String)ChatServer.line_q.firstElement();
ChatServer.line_q.removeElementAt(0);

if(line.startsWith("**talk**"))
{
System.out.println("Broadcaster talk.");
if(Receiver.errselect.equals("errselect"))
{
try
{

System.out.println("Broadcaster errselect.");
ClientSocket clientsocket2 = (ClientSocket)ChatServer.worker_q[Receiver.gindex].elementAt(Receiver.errindex);

System.out.println("errindex name=="+(String)ChatServer.gworker[Receiver.gindex].elementAt(Receiver.errindex));
clientsocket2.writeline(line + "\r\n");
Receiver.errselect = "err";

} catch(IOException e)
{
System.out.println("Broadcaster errslect ioexception");
//clientsocket2.quit();
}

}else{

System.out.println("Broadcaster NO errselect.");
ClientSocket clientsocket = (ClientSocket)ChatServer.worker_q[Receiver.gindex].elementAt(Receiver.talkindex);
ClientSocket clientsocket1 = (ClientSocket)ChatServer.worker_q[Receiver.gindex].elementAt(Receiver.nameindex);
try
{
System.out.println("nameindexname=="+(String)ChatServer.gworker[Receiver.gindex].elementAt(Receiver.nameindex));
System.out.println("talkindexname=="+(String)ChatServer.gworker[Receiver.gindex].elementAt(Receiver.talkindex));
clientsocket.writeline(line + "\r\n");
clientsocket1.writeline(line + "\r\n");
} catch(IOException e)
{
clientsocket.quit();
clientsocket1.quit();

ChatServer.worker_q[Receiver.gindex].removeElementAt(Receiver.nameindex);
ChatServer.gworker[Receiver.gindex].removeElementAt(Receiver.nameindex);

}

}
}else{
System.out.println("Broadcaster no talk.");
for(int i = 1; i < ChatServer.worker_q[Receiver.gindex].size(); i++)
{

ClientSocket clientsocket = (ClientSocket)ChatServer.worker_q[Receiver.gindex].elementAt(i);
try
{
System.out.println("all ("+i+")=="+(String)ChatServer.gworker[Receiver.gindex].elementAt(i));
//System.out.println("worker_q("+i+")connet=="+(String)ChatServer.worker_q.elementAt(i));
clientsocket.writeline(line + "\r\n");
} catch(IOException e)
{
clientsocket.quit();
ChatServer.worker_q[Receiver.gindex].removeElementAt(i);
ChatServer.gworker[Receiver.gindex].removeElementAt(i);
i--;
}

}
}
}
/* finally
{ try
{ out.close();
} catch( IOException e )
{ e.printStackTrace(System.out);
}
}
*/
}
}


class ClientSocket
{
private Socket client;
private BufferedReader reader;
private Writer writer;
public ClientSocket(Socket client, BufferedReader reader, Writer writer)
{
this.client = client;
this.reader = reader;
this.writer = writer;
}

public String readline() throws IOException
{
/*
try
{
// System.out.println("client --readline...");
*/
return reader.readLine();
/*
} catch(IOException e)
{
System.out.println("readline..error.");
}

*/
}

public void writeline(String line) throws IOException
{
writer.write(line);
writer.flush();
}

public void quit()
{
try
{
if(writer != null) writer.close();
if(reader != null) reader.close();
System.out.println("ClientSocket quit!");
}
catch(IOException e)
{
System.out.println("ClientSocket quit fail!");
}

}


}




다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]