https://github.com/freenice12/ChatRoomForJAVABeginner
--
이 글은 앞으로 수정이 계속 되면서 길어질 예정임.ㅠㅠ
한 번에 쓰기에는 의외로 크기가 큰 클래스 들이 있음...
어떤 요구사항으로 만들어진 후로그램인지 이전 글에 설명 해놨음.
-- v.01
서버의 메인 메소드가 있는 클래스로
필드는 서버소켓과 각 클라이언트를 담당해줄 소켓 그리고 채팅방들과 클라이언트들을 담당해줄 메니저 클래스가 있다.
일단 채팅방을 만들 때 십여개의 클래스로 채팅방이 완성 되었다는 신기하고,
혼자만 쓰는게 아니고 다른 사람과 사용해보고 싶고 설치형 파일로 만들어 보고 싶지만
일단은 시간 관계상 이클립스 틴구의 도움을 받아 local에서만 실행할 수 있도록 함.
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
// 로거로 상태를 체크
import org.apache.log4j.Logger;
public class ServerChat {
private ServerSocket serverSocket; // 서버용 소켓
private Socket clientSocket; // 클라이언트 담당 소켓
private ChatManager chatManager; // 채팅방, 클라이언트 담당 클래스
public ServerChat() {
chatManager = new ChatManager(); // 생성자에서 매니저 생성
}
public Socket getClientSocket() { // 클라이언트를 담당하는 스레드인 eachClientThread에서 사용할 게터
return clientSocket;
}
public ChatManager getChatManager() { // 클라이언트를 담당하는 스레드인 eachClientThread에서 사용할 게터
return chatManager;
}
private Logger logger = Logger.getLogger(this.getClass()); // Log4J 를 이용한 로깅
public static void main(String[] args) {
new ServerChat().serverRun();
}
private void serverRun() {
try {
serverSocket = new ServerSocket(5000);
logger.info("Server Running..."); // log4j 사용법은 매우 간단함
while (true) {
logger.info("Waiting for connection");
clientSocket = serverSocket.accept(); // 서버용 소켓이 클라이언트의 접속을 받음(블로킹)
logger.info("got a connection");
// 각 클라이언트별 스레드를 생성
// 차후에 위 블로킹과 클라이언트별 스레드생성을 하지 않고 nio를 이용한 채팅방으로 바꿀 고 싶음..ㅎㅎ
Thread eachClientThread = new Thread(new ClientController(this));
eachClientThread.start();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
댓글 없음:
댓글 쓰기