[Server] 서버 대기중
[Server] 클라이언트 연결 : Thread[Thread-0,5,main]
[Server] 클라이언트 연결 : Thread[Thread-1,5,main]
[Server] 데이터 도착 : Thread[Thread-1,5,main] [CHAT] [클라이언트2]안녕하세요
[Server] 데이터 전송 : Thread[Thread-0,5,main] [CHAT] [클라이언트2]안녕하세요
[Server] 데이터 전송 : Thread[Thread-1,5,main] [CHAT] [클라이언트2]안녕하세요
[Server] 데이터 도착 : Thread[Thread-0,5,main] [CHAT] [클라이언트1]반갑습니다
[Server] 데이터 전송 : Thread[Thread-0,5,main] [CHAT] [클라이언트1]반갑습니다
[Server] 데이터 전송 : Thread[Thread-1,5,main] [CHAT] [클라이언트1]반갑습니다
코드 빈칸 채우기
import network.MultiClientServer;
public class MultiClientServer_Main
{
public static void main( String[] args ) {
new MultiClientServer();
}
}
package network;
import java.net.*;
import java.util.*;
public class MultiClientServer
{
private serverSocket;
private <ThreadPerClient> clients;
public MultiClientServer() {
{
serverSocket = new ( Network.serverPort );
clients = new <ThreadPerClient>();
System.out.println( "[Server] 서버 대기중" );
( true ) {
socket =
serverSocket.();
ThreadPerClient client =
new ThreadPerClient( socket, clients );
clients.add( client );
client.();
System.out.println( "[Server] 클라이언트 연결 : " + client );
}
} ( Exception e ) {
close();
e.printStackTrace();
}
}
public void close() {
{
( ThreadPerClient client : clients ) {
client.close();
client.();
clients.remove( client );
}
( serverSocket != null ) {
serverSocket.close();
serverSocket = null;
}
} ( Exception e ) {
e.printStackTrace();
}
}
}
package network;
import java.io.*;
import java.net.*;
import java.util.*;
public class ThreadPerClient
{
private socket;
private in;
private out;
private <ThreadPerClient> clients;
public ThreadPerClient( socket, <ThreadPerClient> clients ) {
super();
{
this.in = new ( new ( socket.() ) );
this.out = new ( socket.(), true );
this.socket = socket;
this.clients = clients;
} ( Exception e ) {
e.printStackTrace();
}
}
@Override
public void () {
{
( String data = null; ( data =
in.readLine() )
!= null; ) {
System.out.println("[Server] 데이터 도착 : " + this + " " + data );
( ThreadPerClient client : clients ) {
client.write( data );
}
}
} ( Exception e ) {
close();
e.printStackTrace();
}
}
public void write( String data ) {
{
( this.getState() == .State.TERMINATED ) {
System.out.println( "[Server] 클라이언트 연결 해제 : " + this );
close();
}
( out != null ) {
System.out.println("[Server] 데이터 전송 : " + this + " " + data );
out.println( data );
}
} ( Exception e ) {
e.printStackTrace();
}
}
public void close() {
{
( socket != null ) {
socket.close();
socket = null;
}
( in != null ) {
in.close();
in = null;
}
( out != null ) {
out.close();
out = null;
}
} ( Exception e ) {
e.printStackTrace();
}
}
}