JAVA 프로그래밍

문제

서버와 클라이언트가 멀티스레드를 바탕으로 순서에 상관없이 자유롭게 대화할 수 있는 채팅 문제입니다 이를 해결하는 다음 프로그램에 대해 빈칸을 채우세요 
서버 클라이언트
[Server]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Client]님이 들어오실때까지 잠시만 기다려주세요
[Client]님이 들어오셨습니다
[Client]안녕하세요
반갑습니다
[Client]님이 나가셨습니다
quit
[Server]님이 나가셨습니다
[Client]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Server]님이 들어오셨습니다
안녕하세요
[Server]반갑습니다
quit
[Client]님이 나가셨습니다

 

서버 클라이언트
[Server]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Client]님이 들어오실때까지 잠시만 기다려주세요
[Client]님이 들어오셨습니다
[Client]안녕하세요
반갑습니다
[Client]오랜만이네요
[Client]그동안 잘 지내셨어요?
덕분에 잘 지내고 있습니다
신경써 주셔서 감사합니다
[Client]님이 나가셨습니다
quit
[Server]님이 나가셨습니다
[Client]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Server]님이 들어오셨습니다
안녕하세요
[Server]반갑습니다
오랜만이네요
그동안 잘 지내셨어요?
[Server]덕분에 잘 지내고 있습니다
[Server]신경써 주셔서 감사합니다
quit
[Client]님이 나가셨습니다

 

서버 클라이언트
[Server]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Client]님이 들어오실때까지 잠시만 기다려주세요
[Client]님이 들어오셨습니다
[Client]안녕하세요
반갑습니다
[Client]오랜만이네요
[Client]그동안 잘 지내셨어요?
덕분에 잘 지내고 있습니다
신경써 주셔서 감사합니다
[Client]앗~
[Client]지금 나가봐야 할 것 같아요
[Client]죄송합니다
다음에 뵈요
[Client]님이 나가셨습니다
quit
[Server]님이 나가셨습니다
[Client]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요
[Server]님이 들어오셨습니다
안녕하세요
[Server]반갑습니다
오랜만이네요
그동안 잘 지내셨어요?
[Server]덕분에 잘 지내고 있습니다
[Server]신경써 주셔서 감사합니다
앗~
지금 나가봐야 할 것 같아요
죄송합니다
[Server]다음에 뵈요
quit
[Client]님이 나가셨습니다

 

코드 빈칸 채우기

import chat.ChatNetwork; 
 
public class MultiThreadChatServer 
{ 
	public static void main(String[] args) { 
		new ChatNetwork(); 
	} 
} 
package chat; 
import java.util.Scanner; 
import network.Network; 
 
public class ChatNetwork    
{ 
 private Network network; 
 
 public ChatNetwork() { 
  System.out.println( "[Server]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요" ); 
  System.out.println( "[Client]님이 들어오실때까지 잠시만 기다려주세요" ); 
 
  network =  
            new Network(); 
  network.connectAsServer( this ); 
  network.write( "[Server]님이 들어오셨습니다" ); 
  this.write( "[Server]" ); 
 } 
 
 public ChatNetwork( String serverIP ) { 
  System.out.println( "[Client]님이 들어오셨습니다. 대화(종료시 quit)를 입력하세요" ); 
 
  network =  
            new Network(); 
  network.connectAsClient( serverIP, this ); 
  network.write( "[Client]님이 들어오셨습니다" ); 
  this.write( "[Client]" ); 
 } 
  
 public void write( String id ) { 
   { 
   Scanner scan = new Scanner( System.in ); 
    ( String message = null; ( message =  
                                            scan.nextLine() ) != null; ) { 
    ( message.contains( "quit" ) ) { 
     System.out.println( id + "님이 나가셨습니다" ); 
     network.write( id + "님이 나가셨습니다" ); 
     network.write( id + message ); 
     break; 
    } 
    network.write( id + message ); 
   } 
   scan.close(); 
  }  ( Exception e ) { 
   e.printStackTrace(); 
  } 
 } 
 
 @Override 
 public void () { 
   ( String message = null; ( message =  
                                           network.read() ) != null; ) { 
   ( message.contains( "quit" ) ) { 
    System.out.println( message ); 
    network.write( message ); 
    break; 
   } 
    { 
    System.out.println( message ); 
   } 
  } 
  network.close(); 
 } 
} 
package network; 
import java.io.*; 
import java.net.*; 
 
public class Network  
{ 
	public static final int serverPort = 7700; 
	protected  serverSocket;  
	protected  socket;  
	private  in; 
	private  out;  
	private  waitForCounterpart;  
 
	public Network() {	 
		serverSocket = null; 
		socket = null; 
		in = null; 
		out = null; 
		waitForCounterpart = null; 
	} 
	 
	public void connectAsServer(  obj ) { 
		 {  
			serverSocket = new ( serverPort );  
			socket =  
			         serverSocket.();    
			connectInOut( obj );   
		}  ( Exception e ) { 
			e.printStackTrace(); 
		} 
	}  
	 
	public void connectAsClient( String serverIP,  obj ) { 
		 { 
			socket =  
			         new ( serverIP, serverPort );  
			connectInOut( obj );	 
		}  ( Exception e ) { 
			e.printStackTrace(); 
		} 
	} 
 
	public void connectInOut(  obj ) { 
		 { 
			in = new ( new ( socket.() )); 
			out = new ( socket.(), true ); 
			waitForCounterpart = new ( obj ); 
			waitForCounterpart.(); 
		}  ( Exception e ) { 
			e.printStackTrace(); 
		} 
	} 
	 
	public String read() { 
		 { 
			 ( this.isConnecting() == true ) 
				return  
				       in.(); 
		}  ( Exception e ) { 
			e.printStackTrace(); 
		} 
		 
		return null; 
	} 
	 
	public void write( String data ) { 
		 { 
			 ( this.isConnecting() == true ) 
				out.println( data ); 
		}  ( Exception e ) { 
			e.printStackTrace(); 
		}	 
	} 
 
	public boolean isConnecting() { 
		 ( ( socket != null )  
				&& ( in != null )  
				&& ( out != null )  
				&& ( waitForCounterpart != null )  
				&& ( waitForCounterpart.getState() != .State.TERMINATED ) )    
			return true; 
		  
			return false; 
	} 
	 
	public void close() { 
		 { 
			 ( waitForCounterpart != null ) { 
				waitForCounterpart.();	   
				waitForCounterpart = null; 
			} 
			 ( in != null ) { 
				in.close(); 
				in=null; 
			}			 
			 ( out != null ) { 
				out.flush(); 
				out.close(); 
				out = null; 
			} 
			 ( socket != null ) { 
				socket.close(); 
				socket = null; 
			} 
			 ( serverSocket != null ) { 
				serverSocket.close(); 
				serverSocket = null; 
			} 
		}  ( Exception e ) { 
			e.printStackTrace(); 
		} 
	} 
}