간단한 채팅프로그램 만들기 1/3

살찐성인·2022년 7월 17일
0

Java

목록 보기
3/4

Java의 Socket을 활용한 간단한 채팅프로그램을 만들어보자. 흔히 생각하는 채팅 프로그램은 아니며, 서버와 클라이언트가 서로 채팅을 주고받을 수 있는 간단한 프로그램이다.

서버와 클라이언트가 서로 채팅을 주고받는 것이므로, 클래스는 Server와 Client 2개를 만든다. 그 후에 만든 두개의 클래스 모두 실행용 클래스이므로 각각 main 메소드를 생성한다.

Server 클래스에 서버소켓을 생성한다. ServerSocket을 우선 임포트 한 후, 객체의 선언과 초기화를 동시에 해준다. 생성된 서버소켓은 포트번호를 매개로 하여 상호 연결을 하는 것이므로 생성된 소켓 객체의 매개변수에 port를 입력한다. 하지만 port에 대해 따로 정의한 게 없어 해당 코드에 오류가 발생하게 되므로 생성된 소켓 객체 위에 변수의 생성과 초기화를 시켜주어야 한다. 포트번호는 8999로 임의로 정하였다.

ServerSocket serverSocket = null;
int port = 8999;
serverSocket = new ServerSocket(port);

하지만 port를 만들었음에도 해당 코드에 계속 오류가 나있는 것을 확인할 수 있다.
그 이유는, ServerSocket 객체는 Checked Exception이기 때문에 try catch가 반드시 필요한 객체이기 때문이다. 오류가 나 있는 ServerSocket에 마우스를 가져다 대고 두 번째에 surround with try/catch 항목을 클릭하면 아래와 같이 try/catch로 감싸게 된다.

try {
serverSocket = new ServerSocket(port);
		} catch (IOException e) {
	// TODO Auto-generated catch block
		e.printStackTrace();
		}

try/catch로 감싼 후, 가이드 메세지를 하나 써준다. 그 후 그럴 듯하게 보일 수 있게
Thread를 이용한 시간 지연 기능을 넣어보자.
Thread.sleep(2000); 라는 코드를 넣게 되면, 2초동안 잠시 멈췄다가 그 다음 코드가 실행된다. 하지만 Thread도 ServerSocket처럼 Checked Exception이기 때문에 try/catch가 필요하다. 이미 try/catch 구문 안에 Thread가 있으므로 커서를 Thread에 댄 후에 Add catch clause to surrounding try 를 선택한다. 그렇게 되면 기존의 catch에 하나가 더 추가된 모습을 볼 수 있다.

try {
	System.out.println("채팅서버를 구동중입니다.");
	serverSocket = new ServerSocket(port);
	Thread.sleep(2000);
	} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	} catch (InterruptedException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();

그 다음, 채팅서버가 구동이 됐다는 가이드 메세지를 넣은 후, 클라이언트의 접속을 기다리는 중이라는 메세지도 넣으면 된다. 그 후에 Socket입력하고 ctrl+space로 Socket를 임포트 하여 소켓 객체를 생성한다. 이 소켓 객체는 서버소켓을 통하여 클라이언트의 접속을 받아들이는 것으로써, 아래와 같이 작성하면 된다.

try {
	System.out.println("채팅서버를 구동중입니다.");
	serverSocket = new ServerSocket(port);
	Thread.sleep(2000);
	System.out.println("채팅서버를 구동하였습니다.");
	System.out.println("클라이언트의 접속을 기다리는 중..");
Socket socket = serverSocket.accept();

0개의 댓글