이번엔.. 서버가...


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

글쓴이 :김성희 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){}
}
}
}


다음 글들:



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

이름:
E-Mail:
제목:
내용:
HTML 태그 포함 여부: HTML 문서일 경우 체크
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


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