글쓴이 :김성희 2000년 1월 10일 20:52:42
In Reply to: Thread를 .... posted by 김동광 on 2000년 1월 10일 14:24:47:
받는 부분을 스레드로 고치니 잘 되는데요~
계속받는 부분도 잘되고... 계속 보내는 부분도 잘되는데요..
Client에서 Agent에게 보내지는 부분에서 서버쪽에 값이 쌓였다가 Agent에게서 어떤값이 오게 되면, 그 전에 보내져서 서버쪽에 쌓여있던 데이타가 Agent에 한줄한줄 나타나요..
그러니까... Client쪽에서 5줄을 한꺼번에 보냈다면...Agent쪽에서 5번의 답변을 해야만 Client쪽에서 보낸 값이 차례로 쓰여지거든요..
어떻게 고쳐야할지...
소스를 한번 봐주세요...
서버 부분입니다...
////////////// 여기부터 ///////////////
public ChatThread(Server server, Socket socket) throws IOException{
super("Echo service Thread");
xserver = server;
xsocket = socket;
System.out.println("클라이언트\n" + xsocket + "\n에서 접속하였습니다.");
Input = new BufferedReader(new InputStreamReader(xsocket.getInputStream()));
System.out.println("Input : " + Input);
output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(xsocket.getOutputStream())), true);
System.out.println("output : " + output);
start();
}
///// 여기까지는 클라이언트한테서 접속요청을 받고 /////
/////// 여기부터는 이 서버가 Agent에게 접속을 요청하고, 입력되는 값이 교환되는 부분입니다//////
public void run(){
Socket socket2 = null;
PrintWriter output2 = null;
BufferedReader Input2 = null;
InetAddress addr2 = null;
String str;
String address;
String port;
String message;
String answer;
StringTokenizer tokenizer;
try{
while(true){
str = Input.readLine();
if(str.startsWith("0x0010C")){
str = str.substring(9);
System.out.println("str : " + str);
tokenizer = new StringTokenizer(str, "$$");
//command = tokenizer.nextToken();
address = tokenizer.nextToken();
port = tokenizer.nextToken();
message = tokenizer.nextToken();
System.out.println("message : " + message);
addr2 = InetAddress.getByName(address);
socket2 = new Socket(addr2, Integer.parseInt(port));
System.out.println("socket2 : " + socket2);
Input2 = new BufferedReader(new InputStreamReader(socket2.getInputStream()));
output2 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream())), true);
output2.println(message);
answer = Input2.readLine();
System.out.println("answer : " +answer);
output.println(answer);
continue;
}
if(str != null){
output2.println(str);
System.out.println("Client : "+ str);
answer = Input2.readLine();
System.out.println("Agent :" + answer);
output.println(answer);
}
}
}catch(IOException e){
xserver.removeClient(this);
System.out.println("클라이언트\n" + xsocket + "\n의 접속이 끊겼습니다.");
}finally{
try{
xsocket.close();
socket2.close();
}catch(IOException e){}
}
}
}