[Áú¹®]ÀÚ¹ÙäÆÃÇÁ·Î±×·¥¿¡¼­ ÀÌ»óÇÑ ¿¡·¯°¡..


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]

±Û¾´ÀÌ :°í°æȯ 1998³â 5¿ù 19ÀÏ 17:52:50

äÆà ÇÁ·Î±×·¥¿¡¼­ ¿¡·¯°¡ ³ª´Âµ¥ óÀ½º¸´Â¿¡·¯°¡..
µµ¿òÀ» ¿äûÇÕ´Ï´Ù.


Á¦°¡ ¸¸µé°í Àִ äÆÃÀº ±×·ì°£¿¡ äÆÃÀ» ÇÏ°í
äÆà ³»¿ëÀ» È­ÀÏ·Î ÀúÀåÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.


Ŭ¶óÀ̾ðÆ®¿¡¼­´Â ¹®Á¦°¡ ¾ø´Âµ¥ ¼­¹öÂÊ¿¡¼­ ¿¡·¯°¡..
¿¡·¯´Â


I/O exception
6 errors


À§¿Í °°Àº ¿¡·¯°¡ .. º¸Åë¿¡·¯´Â (ChatServer.java:7:
Exception java.io.FileNotFoundExceptonµîµî)
ÀÌ·¸°Ô ³ª´Âµ¥ À§¿¡´Â ½ä··ÇÏ°Ô µÎÁÙ¸¸ ÀÖ½À´Ï´Ù.


¼­¹öÂʼҽºÀº
=================================================
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Date;


class ChatServer
{
static Vector[] gworker = new Vector[10];//vector ¹è¿­(±×·ì¼ö¸¸Å­ ´Ã¸°´Ù.)
static Vector[] worker_q = new Vector[10];// ''

static Vector line_q = new Vector();//´ëÈ­ ³»¿ë

public static void main( String[] args )
throws IOException
{
// 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

{
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);
}


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);
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 ="¼Ò¼Ó ±×·ì :"+vsgroup+"\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
{


String save_title;
String save_data;

this.save_title = save_title;
this.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)
{
//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
{
try
{
writer.write(line);
writer.flush();
// System.out.println("client -- write: " + line);
} catch(IOException e)
{
System.out.println("writeline..error.");
}
}

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:


[ ´ÙÀ½ ±Ûµé ] [ À̾ ±Û¿Ã¸®±â(´äÇϱâ) ] [ ÀÚ¹Ù ¹¯°í ´äÇϱâ ]